在 Python 中,我如何使用列表理解来遍历列表列表?
In Python how do I use list comprehensions to iterate through a list of lists?
我有一个元组列表,其值和坐标为 11 个点
dotted_array = [(0, 0, '.'), (2, 0, '.'), (3, 0, '.'), (0, 1, '.'), (2, 1, '.'), (0, 2, '.'), (2, 2, '.'), (3, 2, '.'), (0, 3, '.'), (2, 3, '.'), (3, 3, '.')]
我有一个包含 5 个列表的列表:
list_of_signs = [['+', '+', '-', '+', '+', '+', '+', '-', '+', '+', '-'], ['+', '+', '-', '+', '-', '+', '+', '-', '+', '+', '-'], ['+', '+', '-', '+', '+', '+', '+', '-', '+', '+', '-'], ['+', '-', '-', '+', '+', '+', '+', '-', '+', '+', '-'], ['+', '+', '-', '+', '+', '+', '+', '-', '+', '+', '-']]
该列表中的每个列表都包含 i 个 +/- 值。这些 +/- 值对应于 dotted_array.
中列表元素的新值
list_of_signs[] = [+,-,+,-,+.....11 values in each 'list_of_signs[]']
这是组合 list_of_signs[] 的 'value' 和 dotted_array[]
的坐标的预期输出
coord_list = [[(0, 0, '+'), (2, 0, '+'), (3, 0, '-'), (0, 1, '+'), (2, 1, '+'), (0, 2, '+'), (2, 2, '+'), (3, 2, '-'), (0, 3, '+'), (2, 3, '+'), (3, 3, '-')], 4 More such lists ]
目前我是:
coord_list= [(x[0],x[1],list_of_signs[0][0]) for x in dotted_array]
获得:
[(0, 0, '+'), (2, 0, '+'), (3, 0, '+'), (0, 1, '+'), (2, 1, '+'), (0, 2, '+'), (2, 2, '+'), (3, 2, '+'), (0, 3, '+'), (2, 3, '+'), (3, 3, '+')]
这个输出不仅错误,而且不一般。
我如何将此概括为所有 list_of_signs?
让我知道它是否有效:
dotted_array = [(1,2,'.'), (4,5,'.')]
list_of_signs = [['+','-'],['-','-']]
coord_list = []
for idx1, list_of_sign in enumerate(list_of_signs):
mylist = []
for idx2, tup in enumerate(dotted_array):
mylist += [(tup[0],tup[1],list_of_signs[idx1][idx2]) ]
coord_list += mylist
print coord_list
写成一行会很有趣。
为两个数组提供有效的输入和预期的输出。
这是你想要的吗? -
>>> dotted_array = [(1,2,'.'), (4,5,'.'),(1,2,'.'), (4,5,'.'),(1,2,'.'), (4,5,'.')]
>>> list_of_signs = [['+','-','-','+','+','-'],['-','-','+','+','+','-']]
>>> coord_list = [[(x[0][0],x[0][1],x[1]) for x in zip(dotted_array,s)] for s in list_of_signs]
>>> coord_list
[[(1, 2, '+'), (4, 5, '-'), (1, 2, '-'), (4, 5, '+'), (1, 2, '+'), (4, 5, '-')], [(1, 2, '-'), (4, 5, '-'), (1, 2, '+'), (4, 5, '+'), (1, 2, '+'), (4, 5, '-')]]
zip
函数在每个索引处组合它作为参数接收的列表,因此返回的 zip 列表(或迭代器)的第 i 个索引将是第一个数组的第 i 个元素然后是第二个数组的第 i 个元素的元组,等等。
dotted = zip(range(1,22,2),range(2,23,2),'.'*11)
signs = ['+-+-+-+-+-+']*5
print [(dotted[n][:-1]+(i,)) for s in signs for n,i in enumerate(s)]
我有一个元组列表,其值和坐标为 11 个点
dotted_array = [(0, 0, '.'), (2, 0, '.'), (3, 0, '.'), (0, 1, '.'), (2, 1, '.'), (0, 2, '.'), (2, 2, '.'), (3, 2, '.'), (0, 3, '.'), (2, 3, '.'), (3, 3, '.')]
我有一个包含 5 个列表的列表:
list_of_signs = [['+', '+', '-', '+', '+', '+', '+', '-', '+', '+', '-'], ['+', '+', '-', '+', '-', '+', '+', '-', '+', '+', '-'], ['+', '+', '-', '+', '+', '+', '+', '-', '+', '+', '-'], ['+', '-', '-', '+', '+', '+', '+', '-', '+', '+', '-'], ['+', '+', '-', '+', '+', '+', '+', '-', '+', '+', '-']]
该列表中的每个列表都包含 i 个 +/- 值。这些 +/- 值对应于 dotted_array.
中列表元素的新值list_of_signs[] = [+,-,+,-,+.....11 values in each 'list_of_signs[]']
这是组合 list_of_signs[] 的 'value' 和 dotted_array[]
的坐标的预期输出coord_list = [[(0, 0, '+'), (2, 0, '+'), (3, 0, '-'), (0, 1, '+'), (2, 1, '+'), (0, 2, '+'), (2, 2, '+'), (3, 2, '-'), (0, 3, '+'), (2, 3, '+'), (3, 3, '-')], 4 More such lists ]
目前我是:
coord_list= [(x[0],x[1],list_of_signs[0][0]) for x in dotted_array]
获得:
[(0, 0, '+'), (2, 0, '+'), (3, 0, '+'), (0, 1, '+'), (2, 1, '+'), (0, 2, '+'), (2, 2, '+'), (3, 2, '+'), (0, 3, '+'), (2, 3, '+'), (3, 3, '+')]
这个输出不仅错误,而且不一般。 我如何将此概括为所有 list_of_signs?
让我知道它是否有效:
dotted_array = [(1,2,'.'), (4,5,'.')]
list_of_signs = [['+','-'],['-','-']]
coord_list = []
for idx1, list_of_sign in enumerate(list_of_signs):
mylist = []
for idx2, tup in enumerate(dotted_array):
mylist += [(tup[0],tup[1],list_of_signs[idx1][idx2]) ]
coord_list += mylist
print coord_list
写成一行会很有趣。
为两个数组提供有效的输入和预期的输出。
这是你想要的吗? -
>>> dotted_array = [(1,2,'.'), (4,5,'.'),(1,2,'.'), (4,5,'.'),(1,2,'.'), (4,5,'.')]
>>> list_of_signs = [['+','-','-','+','+','-'],['-','-','+','+','+','-']]
>>> coord_list = [[(x[0][0],x[0][1],x[1]) for x in zip(dotted_array,s)] for s in list_of_signs]
>>> coord_list
[[(1, 2, '+'), (4, 5, '-'), (1, 2, '-'), (4, 5, '+'), (1, 2, '+'), (4, 5, '-')], [(1, 2, '-'), (4, 5, '-'), (1, 2, '+'), (4, 5, '+'), (1, 2, '+'), (4, 5, '-')]]
zip
函数在每个索引处组合它作为参数接收的列表,因此返回的 zip 列表(或迭代器)的第 i 个索引将是第一个数组的第 i 个元素然后是第二个数组的第 i 个元素的元组,等等。
dotted = zip(range(1,22,2),range(2,23,2),'.'*11)
signs = ['+-+-+-+-+-+']*5
print [(dotted[n][:-1]+(i,)) for s in signs for n,i in enumerate(s)]