查找迭代的子列表长度

时间:2014-11-25 22:50:37

标签: python list loops iteration

intlist = [[1,2,3],[6,5,4],[5,7,9],[6,2,6]]

intlist可以是基于用户输入的任何内容,但每个子集中的元素数量应相同。我试图将每个子列表中最大的甚至整数提取到一个新列表中。在这种情况下,将返回[2,6,0,6]

我想知道如何找到给定子列表的长度(反过来是每个子列表的长度),以便我可以遍历那么多元素。

for r in range(len(intlist)):
    for c in range(?): #Range here should be length of sublist
        if intlist[r][c] % 2 == 0:
            #if it is even, choose max even value.

2 个答案:

答案 0 :(得分:1)

您在寻找子列表吗?这只是intlist[r]。它不是超级Pythonic,但是:

for r in range(len(intlist)):
    for c in range(len(intlist[r])): #Range here should be length of sublist
        if intlist[r][c] % 2 == 0:
            #if it is even, choose max even value.

你可以逐步清理它。例如,首先找到子列表,而不是非常依赖索引。

for sublist in intlist:
    for c in range(len(sublist)): #Range here should be length of sublist
        if sublist[c] % 2 == 0:
            #if it is even, choose max even value.

然后你可以去除子索引,如果你需要的只是值:

for sublist in intlist:
    for value in sublist:
        if value % 2 == 0:
            #if it is even, choose max even value.

答案 1 :(得分:0)

在Python中很少使用类似range(len(intlist))之类的东西是最好的方法,所以如果你发现自己写的那种东西,那就表明有更好的方法可以做到这一点

您可以使用传统的嵌套for循环来完成此操作。例如,

#! /usr/bin/env python

intlist = [[1,2,3],[6,5,4],[5,7,9],[6,2,6]]

maxlist = []
for sublist in intlist:
    evens = []
    for i in sublist:
        if i % 2 == 0:
            evens.append(i)
    if evens:
        maxlist.append(max(evens))
    else:
        maxlist.append(0)
print maxlist

然而,使用列表推导来做它更整洁,更有效率。

print [max([i for i in sublist if i % 2 == 0] or [0]) for sublist in intlist]

或者分两个阶段,

evenlist = [[i for i in sublist if i % 2 == 0] for sublist in intlist]
print [max(sublist or [0]) for sublist in evenlist]

当子列表中不包含偶数时,or [0]内容提供默认列表,否则max会引发ValueError: max() arg is an empty sequence

就个人而言,如果子列表不包含任何偶数,我倾向于返回None。这样你可以区分0实际上是最高偶数存在的情况和列表中没有偶数的情况。但我想在这种情况下最好的取决于您正在处理的数据以及您最终使用的数据。