Python:按值而不是索引遍历列表

时间:2014-06-10 23:22:51

标签: python

如何通过索引以外的其他方式进行迭代?

我有

L = [[1,2,3],[5,3,6],[5,4,14],[23,5,2],....,[11,13,6]]

注意中间元素如何总是增加1.外部元素几乎是随机的。

我希望能够说出这样的话:

for i in L[2:4]:

将迭代元素:[1,2,3],[5,3,6],[5,4,14],而不是将2:4视为索引。

很明显我的for循环的语法不正确。我怎么能这样做?

2 个答案:

答案 0 :(得分:4)

[item for item in L if 2 <= item[1] <= 4]

是这样做的一种方式

def slice_special(a_list,slice_idx,minimum_value,maximum_value):
     return [item for item in a_list if minimum_value <= item[slice_idx] <= maximum_value]

print slice_special(L,1,2,4)

或像专用数据结构更复杂的东西

class MyDataStructure:
    def __init__(self,a_list):
        self.my_data = a_list
    def __getitem__(self,arg):
        if isinstance(arg,slice):
            return [item for item in self.my_data if arg.start <= item[arg.step] <= arg.stop]

        raise Exception("%s is unscriptable"%self)

print MyDataStructure([[1,2,3],[5,3,6],[5,4,14],[23,5,2]])[2:4:1]

答案 1 :(得分:0)

如果您知道列表元素的大小,可以将子列表解压缩到迭代变量中:

>>> L = [[1,2,3],[5,3,6],[5,4,14],[23,5,2]]
>>> for a, b, c in L:
...     print(a,b,c)
...
1 2 3
5 3 6
5 4 14
23 5 2
>>>

如果您不想使用某个索引,可以将其分配给_,这是标记未使用变量的标准方法。