使用列表理解我可以轻松地执行以下操作:
l = [0, 1, 2]
for i in l:
subl = [j for j in l if j != i]
通过使用%
运算符操作索引,是否存在非列表理解方法?
修改
澄清:索引与列表元素匹配
答案 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()
。