在循环遍历列表时跳过迭代 - Python

时间:2013-11-13 13:51:11

标签: python list for-loop python-3.x counter

有没有办法跳过这个for循环中的第一次迭代,这样我就可以在for循环中放入一个for循环,以便将列表中的第一个元素与其余元素进行比较。

from collections import Counter
vowelCounter = Counter()
vowelList = {'a','e','i','o','u'}
userString = input("Enter a string ")
displayed = False
for letter in userString:
    letter = letter.lower()
    if letter in vowelList:
        vowelCounter[letter] +=1
    for vowelCount1 in vowelCounter.items():
        char, count = vowelCount1
        for vowelCount2 in vowelCounter.items(STARTING AT 2)
            char2, count2 = vowelCount2
            if count > count2 : CONDITION

语法如何用于此?我只需要做一个5深的For循环。所以下一个将从3开始,然后从4开始,然后是5,正确的打印语句取决于条件。 感谢

4 个答案:

答案 0 :(得分:4)

你可以这样做:

for vowelCount2 in vowelCounter.items()[1:]:

除了第一个元素之外,这将为您提供vowelCounter.items()的所有元素。

[1:]表示您正在对列表进行切片,这意味着:从索引1开始,而不是从索引0开始。因此,您要从列表中排除第一个元素。

如果您希望索引依赖于前一个循环,您可以这样做:

for i, vowelCount1 in enumerate(vowelCounter.items()):
    # ...
    for vowelCount2 in vowelCounter.items()[i:]:
        # ...

这意味着您将i指定为起始索引,它取决于vowelCount1的索引。每次迭代enumerate(mylist)时,函数mylist都会为您提供索引和列表元素。

答案 1 :(得分:2)

看起来你想要的是将每个计数与其他每个计数进行比较。虽然您可以按照自己的建议行事,但更简洁的方法可能是使用itertools.combinations

for v1,v2 in itertools.combinations(vowelCounter, 2):
    if vowelCounter[v1] > vowelCounter[v2]:
        # ...

这将迭代所有元音对以进行比较。这样做,您可能还想检查vowelCounter[v2] > vowelCounter[v1]是否会再次看到这两个(这适用于此方法或嵌套for循环方法)。或者,您可以使用具有相同参数的itertools.permutations函数,只需一次检查即可。

答案 2 :(得分:2)

要跳过迭代,您可以使用continue关键字,例如:

list = [1,2,3,4,5,6,7,8,9,10]

for value in list:
  if value == list[0]:
    continue
  print(value)

会给你:

2
3
4
5
6
7
8
9
10

我希望这能回答你的问题。

答案 3 :(得分:0)

按照其他几个人的建议用[1:]切片列表会创建一个新数组。使用带有itertools.islice()

的切片迭代器更快更经济
from itertools import islice
for car in islice(cars, 1, None):
    # do something