我想创建一个for循环,它将通过整数0到k-1,除了整数i。 (我正在比较k个项目的一些列表,我不需要将一个列表中的项目i与另一个列表中的项目i进行比较。)
我有一个相当简单的方法,但我一直认为这是一种更“Pythonic”,更优雅的方式。
我正在做的是:
tocheck = range(k)
del(tocheck[i])
for j in tocheck:
这很容易,但我喜欢Python的一件事就是,对于像这样的东西,似乎总是有一个聪明的单行“Pythonic”技巧。
感谢。
答案 0 :(得分:11)
也许使用itertools.chain
from itertools import chain
for j in chain(range(i), range(i+1, k)):
# ...
答案 1 :(得分:4)
我想我会做其中一个:
for j in range(k):
if j == i: continue
...code here...
或(固定)
tocheck = range(k)
for j in tocheck[:i] + tocheck[i + 1:]:
...code here...
或
for j in range(i) + range(i + 1, k):
...code here...
答案 2 :(得分:4)
我认为留下空白的最惯用方法是使用continue
跳过for循环。
i = 20
for j in range(50):
if j==i:
continue
print j
答案 3 :(得分:2)
这个怎么样:
for l in (j for j in range(k) if j != i):
....
这使用了一个生成器表达式,可能被认为是“pythonic”,虽然表达式本身有点混乱,可能被认为是不优雅的。
答案 4 :(得分:1)
另一种可能性就是使用迭代器:
from itertools import chain
k = 10
l = range(k)
i = 2
print [el for el in iter(l[:i])] + [el for el in iter(l[i+1:])]
适用于任何列表l
。如果l
只是某个range
,您可以省略l
的明确定义,只需写下:
print [el for el in xrange(i)] + [el for el in xrange(i+1,k)]