如何通过索引以外的其他方式进行迭代?
我有
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循环的语法不正确。我怎么能这样做?
答案 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
>>>
如果您不想使用某个索引,可以将其分配给_
,这是标记未使用变量的标准方法。