Python 一行代码中的迭代

Python 一行代码中的迭代,python,Python,我是python的noob,我想我有一个相关的问题 我有两个python列表: 在listA中,我有mysql表的列名。 listA = ["columnA","columnB","columnC"] 在列表B中,我得到了对该值的查询结果 listB = [["10","30","40"], ["14","28","38"], ["13","23","45"]] python中生成这样的输出最有效的方法是什么? columnA = 10, colum

我是python的noob,我想我有一个相关的问题

我有两个python列表:

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

listA = ["columnA","columnB","columnC"]
在列表B中,我得到了对该值的查询结果

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

字典列表将很好地工作:

>>> [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'}]
>>> 

字典列表将很好地工作:

>>> [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'}]
>>> 
以下是一行(根据您的标题):

括号
[]
中用
表示
的符号称为。有关更多详细信息,请参阅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']
'columnA=13, columnB=23, columnC=45'
[ '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
然后我们需要将其与彗差分离组合成一个字符串:

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

['columnA=13', 'columnB=23', 'columnC=45']
'columnA=13, columnB=23, columnC=45'
[ '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
因此,表达:

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

['columnA=13', 'columnB=23', 'columnC=45']
'columnA=13, columnB=23, columnC=45'
[ '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
然后,我们将整体结果与换行符
'\n'
结合起来:

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

['columnA=13', 'columnB=23', 'columnC=45']
'columnA=13, columnB=23, columnC=45'
[ '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
以下是一行(根据您的标题):

括号
[]
中用
表示
的符号称为。有关更多详细信息,请参阅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']
'columnA=13, columnB=23, columnC=45'
[ '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
然后我们需要将其与彗差分离组合成一个字符串:

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

['columnA=13', 'columnB=23', 'columnC=45']
'columnA=13, columnB=23, columnC=45'
[ '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
因此,表达:

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

['columnA=13', 'columnB=23', 'columnC=45']
'columnA=13, columnB=23, columnC=45'
[ '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
然后,我们将整体结果与换行符
'\n'
结合起来:

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

['columnA=13', 'columnB=23', 'columnC=45']
'columnA=13, columnB=23, columnC=45'
[ '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

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

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]))

试试看。

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

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]))

试试看。

一个宽泛的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

一个宽泛的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

您应该能够使用
listA
压缩
子列表,然后
。加入
,并相应地设置格式。我尝试过使用两个嵌套for循环,但没有很好的结果……您说您尝试过;显示您尝试的内容。您应该能够使用
listA
压缩
子列表,然后使用
。加入
,并相应设置格式。我尝试使用两个嵌套for循环,但没有得到好的结果…您说您尝试过;展示您的尝试。感谢mate您为我提供了很多帮助。虽然我喜欢数据结构,但我不确定这是否回答了问题(使用所需的打印格式),除非问题的措辞不清楚。感谢mate您为我提供了很多帮助。虽然我喜欢数据结构,但我不确定这是否回答了问题(使用所需的打印格式),除非问题措辞不清楚。这个答案出现在低质量审查队列中,可能是因为您没有提供任何代码解释。如果这个代码回答了这个问题,考虑添加一些解释你答案中的代码的文本。这样,你就更有可能获得更多的选票,并帮助提问者学习新的东西。谢谢你的建议@lmoth这个答案出现在低质量的评论队列中,大概是因为你没有提供任何代码解释。如果这个代码回答了这个问题,考虑添加一些解释你答案中的代码的文本。这样,你就更有可能获得更多的选票,并帮助提问者学习新的东西。谢谢你的建议@lmo