在For循环中从特定点开始

7

有没有可能告诉For循环从特定位置开始?

>>> languages = ["C", "C++", "Perl", "Python"] 
>>> for x in languages:
...     print(x)
... 
C
C++
Perl
Python
>>> 

我该如何让脚本从"Perl"开始运行?我不需要它循环回来。

1
通过对列表进行切片并迭代其中的元素 - Andrew Li
请参见:see also - user25064
可能是Pythonic方法遍历列表的一部分的重复。 - SiHa
6个回答

7

使用myList[start:stop:skip]可以通过索引对列表进行切片。从第三个索引(从零开始计数),不停止,也不跳过索引,如下所示:

for x in languages[2::]:
    print x

我会为你提供:

Perl
Python

另请参阅:解释Python的切片表示法


对于语言[languages.index("Perl")::]中的x是什么意思? - Ari Gold
@AriGold 我不确定那是什么。对我来说它会产生语法错误。 - chickity china chinese chicken
真的,没门儿;用languages[languages.index("Perl"):]替换languages[2::];给出Perl的索引,所以不需要整数。 - Ari Gold

3
您可以使用itertools.dropwhile来实现这一点:
>>> import itertools

>>> languages = ["C", "C++", "Perl", "Python"] 

>>> for language in itertools.dropwhile(lambda x: x != 'Perl', languages):
...     print(language)
... 
Perl
Python
>>> 
itertools.dropwhile接受两个参数,一个函数用于确定列表元素是否等于您想要的起始值,以及可迭代的列表 - 在这种情况下是列表 - 您想要循环遍历。 dropwhile将跳过元素,直到找到满足函数的元素,然后输出所有元素,直到可迭代对象耗尽。
如果您选择起始点的标准比简单的相等更复杂,则此功能非常有用。例如,如果您想从第一个以“P”开头的元素开始,则可以执行以下操作:
>>> for language in itertools.dropwhile(lambda x: not x.startswith('P'), languages):
...     print(language)
... 
Perl
Python
>>> 

相反的是itertools.takewhile,只要满足提供的函数,它就会迭代。


3
languages = ["C", "C++", "Perl", "Python"]
# add start index range by the index of "Perl" 
for x in languages[languages.index("Perl"):]:
  print(x)

# Perl
# Python

for x in languages[languages.index("C++"):]:
  print(x)

# C+=
# Perl
# Python

2

试试这个。我希望这会对你有所帮助。

languages = ["C", "C++", "Perl", "Python"]

for k in range(0,len(languages)):
  print(languages[k-2])

输出结果为:

Perl
Python
C
C++

在Python中,for循环函数是(for k in x(start, stop, step))。这里的x是你的列表或字符串变量。
start : Indicates where the for loop should start and the index starts from zero.

stop : Indicates where the for loop ends. It takes up to (n-1) elements.

例如:
for k in range(0,100):

它从0开始输出直到99,如果您想要100的输出。您应该这样说明:

n = 100
for k in range(n+1):
    print k

输出范围为0到100。在这种情况下,for循环将从零开始取索引(起始值)。

step : Indicates how many steps should do in for loop. By default step is one in for loop.

例如:
for k in range(0,10,1):
    print k
#output is 0,1,2,3,4,5,6,7,8,9


for k in range(0,10,2):
    print k
#output is 0,2,4,6,8

for k in range(0,10,3):
    print k
#output is 0,3,6,9

1
您可以尝试:

languages = ["C", "C++", "Perl", "Python"]
for i in range(languages.index("Perl"),len(languages)):
    # 1st parameter of range will find Perl's index from list languages
    #2nd parameter - Length of list
    print languages[i]


Perl
Python

0
如果您想要从 Perl 的开始到列表末尾的元素
languages = ["C", "C++", "Perl", "Python"]
print languages

通过列表切片非常容易

print languages[2:]

输出:

['Perl', 'Python']

你可以循环这个列表并将元素分别放在不同的行上。
即使你想要从 Perl 中获取回路元素并返回到 Perl,你也可以使用列表切片。
a = []
a.extend(languages[2:])
a.extend(languages[:2])
print a

输出:

['Perl', 'Python', 'C', 'C++']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接