迭代时如何获取所有其他元素的子列表?

时间:2017-08-26 14:08:55

标签: python iteration modulo sublist

使用列表理解我可以轻松地执行以下操作:

l = [0, 1, 2]
for i in l:
    subl = [j for j in l if j != i]

通过使用%运算符操作索引,是否存在非列表理解方法?

修改

澄清:索引与列表元素匹配

2 个答案:

答案 0 :(得分:1)

这是一个不使用列表理解的解决方案:

l = [0, 1, 2]
for i in range(len(l)):
    subl = l[:]
    subl.remove(i)

<强>输出

[1, 2]
[0, 2]
[0, 1]

答案 1 :(得分:1)

这完全是人为的,没有理由这样做:

>>> l = [0, 1, 2]
>>> n = len(l)
>>> [[l[(j+i)%n] for j in range(n-1)] for i in range(n)]
[[0, 1], [1, 2], [2, 0]]

它围绕列表旋转,这是%将要执行的操作,对于更长的列表可能更明显:

>>> l = [0, 1, 2, 4, 5]
>>> n = len(l)
>>> [[l[(j+i)%n] for j in range(n-1)] for i in range(n)]
[[0, 1, 2, 4], [1, 2, 4, 5], [2, 4, 5, 0], [4, 5, 0, 1], [5, 0, 1, 2]]

如果您确实需要此旋转输出,请建议查看collections.deque()