2010-09-06 50 views
0

举例来说,如果我通过列表想要周期和所有,但最终名单的条目执行一些操作,我可以这样做:Python - 区分列表中的项目索引和FOR循环中的项目内容的方法?

z = [1,2,3,4,2] 
for item in z: 
    if item != z[-1]:   
     print z.index(item) 

而是获得输出” ... 0 1 2 3,“我会得到 ”... 0 2 3.“

是否有一种方法可以在不使用“for x in range(len(list) - 1)”的情况下对列表中最后一个项目(当列表中有IDENTICAL项目)解?也就是说,我想继续使用“列表中的项目”。

非常感谢!

回答

4

你可以使用:

for index, item in enumerate(z): 
    if index != len(z)-1: 
     print index 
+3

或切片结合它在其他的答案建议:如果你使用'enumarate(Z [: - 1])',而不是'枚举(Z )''你可以摆脱'if'语句。 – 2010-09-06 18:32:36

1
for index, item in enumerate(your_list): 
    do_something 
1

[z.foo() for z in z[:-1]

+0

哇 - 你们很快。非常感谢(对你们所有人)! – Georgina 2010-09-06 18:27:52

10

使用切片:

for item in z[:-1]: 
    # do something 
+0

+1这是紧凑的,也很容易理解。 – 2010-09-06 18:22:04

+0

我爱蟒蛇.. – daniels 2010-09-06 18:23:50

+3

您可以通过在itertools模块中使用'islice'方法来减少创建切片的循环开销,如下所示:'for itertools.islice(z,0,len(z)-1) :' – martineau 2010-09-06 19:38:39

0
def all_but_last(iterable): 
    iterable= iter(iterable) 

    try: previous= iterable.next() 
    except StopIteration: return 

    for item in iterable: 
     yield previous 
     previous= item 

把它放在一个模块在何地,只要你需要它使用它。

在你的情况,你会怎么做:

for item in all_but_last(z): 
相关问题