0

有没有办法跳过这个 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

4 回答 4

4

你可以这样做:

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

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

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

如果您希望索引依赖于前一个循环,您可以执行以下操作:

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

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

于 2013-11-13T13:53:30.837 回答
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

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

于 2014-09-22T20:48:18.873 回答
2

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

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

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

于 2013-11-13T13:59:07.570 回答
0

按照其他一些人的建议,使用 [1:] 对列表进行切片会创建一个新数组。使用带有itertools.islice()的切片迭代器更快、更经济

from itertools import islice
for car in islice(cars, 1, None):
    # do something
于 2015-10-19T10:08:19.570 回答