索引一个循环中的列表列表

时间:2017-09-29 05:55:41

标签: python loops

我可以使用单个索引在一个循环中迭代两个列表的逻辑,例如,使用索引[0,0][0,1][1,0][1,1]获取2x2迭代1 2 3 4?到目前为止,这是我最好的尝试:

numbers_list = [[1,2],[3,4]]
letters_list = ['a', 'b', 'c', 'd']
for i in [1,2,3,4]:
    indx1, = i%2,
    indx2 = i % 2 + i-2
    print indx1, indx2
    print numbers_list[indx1][indx2], letters_list[i]

期望的输出是

0 a
1 b
2 c
3 d

5 个答案:

答案 0 :(得分:1)

只是嵌套循环。

lists = [[1,2],[3,4]]
for i in range(len(lists)):
    sublist = lists[i]
    for j in range(len(sublist)):
        element = sublist[j]
        print element

这将给出: 1 2 3 4

您的方法可行,但您必须知道列表的长度。此外,您的所有列表都必须具有相同的长度,而使用此方法,它们可能会有所不同。

答案 1 :(得分:1)

如果您不反对使用像enumerate()这样的内置功能,这可能会有效:

numbers_list = [[1,2],[3,4]]
letters_list = ['a', 'b', 'c', 'd']
for i, n in enumerate([1,2,3,4]):
    print i, letters_list[i] 

输出:

0 a
1 b
2 c
3 d

答案 2 :(得分:1)

由于我不知道您的列表的generic structure,我将接受您提供的lists。所以在single loop

for i in range(4): 
   div,rem = divmod(i,2) 
   print(numbers_list[div][rem],letters_list[i])

所以,我们得到:

IN : letters_list = ['a', 'b', 'c', 'd']
IN : numbers_list = [[1,2],[3,4]]

OUT : 1 a
      2 b
      3 c
      4 d

答案 3 :(得分:0)

使用MacProvider.generateKey();

对于2x3列表:

itertools.product

如果您只想将列表展平为包含(index_1,index_2,item)的元组列表,则可以执行嵌套列表解析:

from itertools import product

numbers_list = [[1, 2, 3], [3, 4, 5]]

for i, j in itertools.product(range(2), range(3)):
    print("indices:")
    print(i)
    print(j)
    print("Item:")
    print(numbers_list[i][j])

答案 4 :(得分:0)

如果您希望能够在单个顶级循环中处理任何形状的双深嵌套列表,您可以先定义辅助迭代器函数(您只需要执行一次):

def nest_iter(x):
    for i, a in enumerate(x):
        for j, b in enumerate(a):
            yield i, j, b

完成后,您可以在代码的其余部分中使用它,如下所示:

numbers_list = [[1, 2], [3, 4, 5]]

for i, j, b in nest_iter(numbers_list):
    print i, j, b

输出结果为:

0 0 1
0 1 2
1 0 3
1 1 4
1 2 5

在此示例中,有两个不同长度的子列表。