Python - 打印中间带字符串的列表列表

时间:2018-03-11 17:15:46

标签: python python-3.x

我正在尝试编写一个函数,它将获取列表列表并逐个打印出来,并在它们之间添加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”。有人可以建议吗?

5 个答案:

答案 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

概要是:

  1. 使用s="INSERT INTO table\nSELECT\n";
  2. 创建标题
  3. 使用嵌套的join在外部列表元素之间创建"\nUNION\nSELECT\n"的列表格式列表,并使用内部列表元素创建', ';
  4. 返回要打印的字符串或在程序的其他部分中使用。

答案 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))