我正在尝试编写一个函数,它将获取列表列表并逐个打印出来,并在它们之间添加UNION一词。我的代码如下所示:
def printsql(lst):
print("INSERT INTO table")
for x in lst:
print("SELECT")
print(*x, sep=', ')
print("UNION")
return(str)
a = [[1, 3, 4], [2, 5, 7], [3, 4, 6]]
print(printsql(a))
我的输出目前看起来像这样:
INSERT INTO table
SELECT
1, 3, 4
UNION
SELECT
2, 5, 7
UNION
SELECT
3, 4, 6
UNION
这几乎就是我所需要的,但我无法弄清楚如何不打印最后一个“UNION”。有人可以建议吗?
答案 0 :(得分:3)
蛮力是使用枚举
raise ValueError("Error message here")
但我有兴趣看看是否有更优雅的解决方案。
答案 1 :(得分:2)
考虑在Python中使用.join
方法在列表元素之间插入字符串。
如此工作:
>>> '|'.join(['a','b','c','d'])
'a|b|c|d'
您的示例基本上是这样做的:
[Header string "INSERT INTO table\nSELECT\n"]
'\nUNION\nSELECT\n'.join([list items])
', '.join([sub list items])
获取您描述的模式。
您可以将该描述转换为Python:
def printsql(lst):
s="INSERT INTO table\nSELECT\n"
s+="\nUNION\nSELECT\n".join(', '.join(str(e) for e in sl) for sl in lst)
return s
然后:
>>> a = [[1, 3, 4], [2, 5, 7], [3, 4, 6]]
>>> print(printsql(a))
INSERT INTO table
SELECT
1, 3, 4
UNION
SELECT
2, 5, 7
UNION
SELECT
3, 4, 6
概要是:
s="INSERT INTO table\nSELECT\n"
; join
在外部列表元素之间创建"\nUNION\nSELECT\n"
的列表格式列表,并使用内部列表元素创建', '
; 答案 2 :(得分:1)
这是避免额外循环和条件的一种方法:
def printsql(lst):
print("INSERT INTO table")
for x in lst[:-1]:
print("SELECT")
print(*x, sep=', ')
print("UNION")
print("SELECT")
print(*lst[-1], sep=', ')
return(str)
a = [[1, 3, 4], [2, 5, 7], [3, 4, 6]]
print(printsql(a))
'''
INSERT INTO table
SELECT
1, 3, 4
UNION
SELECT
2, 5, 7
UNION
SELECT
3, 4, 6
<class 'str'>
'''
答案 3 :(得分:1)
这将删除最后一个union和str类
def printsql(lst):
print("INSERT INTO table")
counter = 0
for x in lst:
counter = counter + 1
print("SELECT")
print(*x, sep=', ')
if (len(lst)- 1) > counter:
print("UNION")
return("")
a = [[1, 3, 4], [2, 5, 7], [3, 4, 6]]
print(printsql(a))
答案 4 :(得分:0)
快速而肮脏。
def printsql(lst):
print("INSERT INTO table")
for x in lst:
if x != lst[-1]:
print("SELECT")
print(*x, sep=', ')
print("UNION")
else:
print("SELECT")
print(*x, sep=', ')
return(str)
a = [[1, 3, 4], [2, 5, 7], [3, 4, 6]]
print(printsql(a))