除了i之外,“Pythonic”用于循环整数0到k-1

时间:2014-08-20 21:51:17

标签: python loops for-loop

我想创建一个for循环,它将通过整数0到k-1,除了整数i。 (我正在比较k个项目的一些列表,我不需要将一个列表中的项目i与另一个列表中的项目i进行比较。)

我有一个相当简单的方法,但我一直认为这是一种更“Pythonic”,更优雅的方式。

我正在做的是:

tocheck = range(k)
del(tocheck[i])
for j in tocheck:

这很容易,但我喜欢Python的一件事就是,对于像这样的东西,似乎总是有一个聪明的单行“Pythonic”技巧。

感谢。

5 个答案:

答案 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)]