在一行代码中迭代

时间:2016-09-07 13:55:24

标签: python

我是python中的菜鸟,我想我有一个相关的问题。

我在python中有这两个列表:

在listA中,我有我的mysql表的列名。

listA = ["columnA","columnB","columnC"]

在listB中,我有查询此值的结果

listB = [["10","30","40"],
         ["14","28","38"],
         ["13","23","45"]]

在python中生成这样的输出的最有效方法是什么?

   columnA = 10, columnB = 30, columnC = 40
   columnA = 14, columnB = 28, columnC = 38
   columnA = 13, columnB = 23, columnC = 45

4 个答案:

答案 0 :(得分:2)

字典列表效果很好:

>>> [dict(zip(listA, row)) for row in listB]
[{'columnA': '10', 'columnC': '40', 'columnB': '30'}, {'columnA': '14', 'columnC': '38', 'columnB': '28'}, {'columnA': '13', 'columnC': '45', 'columnB': '23'}]
>>> 

答案 1 :(得分:2)

这是单行(根据你的标题):

print '\n'.join([ ', '.join([ listA[i]+"="+x[i] for i in range(len(x)) ]) for x in listB ] )

括号for[]的符号称为list comprehensions。有关更多详细信息,请参阅Python文档。单行使用嵌套列表推导:

外部部分正在解析listB的外部列表,如下例所示。这有助于我们逐行解析listB。

[ repr(x) for x in listB ]

内部部分正在解析listB行以构建字符串。我们正在迭代索引而不是元素本身,以便从listA获取列名:

[ listA[i]+"="+x[i] for i in range(len(x)) ]

相当于:

for i in range(len(x)):
    listA[i]+"="+x[i]

第三行产生:

['columnA=13', 'columnB=23', 'columnC=45']

然后我们需要将它组合成一个带有昏迷分离的字符串:

', '.join(['columnA=13', 'columnB=23', 'columnC=45'])

结果:

'columnA=13, columnB=23, columnC=45'

因此,表达式:

[ ', '.join([ listA[i]+"="+x[i] for i in range(len(x)) ]) for x in listB ]

结果:

[ 'columnA=10, columnB=30, columnC=40',
  'columnA=14, columnB=28, columnC=38',
  'columnA=13, columnB=23, columnC=45' ]

然后,我们将整体结果与换行符'\n'合并:

print '\n'.join([ 'columnA=10, columnB=30, columnC=40',
                  'columnA=14, columnB=28, columnC=38',
                  'columnA=13, columnB=23, columnC=45' ])

结果:

columnA=10, columnB=30, columnC=40
columnA=14, columnB=28, columnC=38
columnA=13, columnB=23, columnC=45

答案 2 :(得分:0)

不是最有效的方法,需要两行,但您可以尝试以下代码:

listA = ["columnA","columnB","columnC"]
listB = [["10","30","40"],
         ["14","28","38"],
         ["13","23","45"]]

for item in listB:
    print("%s = %s, %s = %s, %s = %s" % (listA[0], item[0], listA[1], item[1], listA[2], item[2]))

试试here

答案 3 :(得分:0)

广泛的for循环就足够了

for i in range (len(listB)):
    print(listA[0]+" = "+listB[i][0]+","+listA[1]+" = "+listB[i][1]+","+listA[2]+" = "+listB[i][2])
    i=+1