Python的foreach等价语句

309

我正在学习Python,对于foreach迭代有一个问题。 我是Python的新手,但我有一些C#的经验。所以我想知道,Python中是否有一种等效的函数可以迭代遍历我的集合中的所有项,例如

pets = ['cat', 'dog', 'fish']
marks = [ 5, 4, 3, 2, 1]

或者类似这样的东西。

8个回答

472

当然,使用for循环。

for f in pets:
    print f

1
如果我还必须知道索引/键呢? - candlejack
43
那么您可以使用enumerate。例如:for k,v in enumerate(pets):等等。 - Hannu
3
这个结构不幸地不是集合本身的内在特性,而是外在的。结果是双重的:(1)它不能被链接 (2)它需要两行符合Python惯用法的代码。Python不直接支持对集合进行真正的foreach或链式操作。一个例子可能是myList.foreach(a => print(a)).map(lambda x: x*2) - WestCoastProjects

47

就像这样:

for pet in pets :
  print(pet)

事实上,Python 只能使用 foreach 风格的 for 循环。


31

观察这一点也很有趣

要迭代序列的索引,可以将range()len()结合使用,如下所示:

a = ['Mary', 'had', 'a', 'little', 'lamb']
for i in range(len(a)):
  print(i, a[i])

输出

0 Mary
1 had
2 a
3 little
4 lamb

编辑#1:另一种方法:

在遍历序列时,可以使用enumerate()函数同时检索位置索引和相应的值。

for i, v in enumerate(['tic', 'tac', 'toe']):
  print(i, v)

输出

0 tic
1 tac
2 toe

13

对于更新的答案,你可以轻松地在 Python 中构建一个 forEach 函数:

def forEach(list, function):
    for i, v in enumerate(list):
        function(v, i, list)

你也可以将这个方法应用到mapreducefilter以及其他编程语言中的数组函数。使用for循环虽然速度足够快,但是与forEach或其他函数相比,代码量更大。你也可以扩展列表(list),使用本地指针指向一个类,以便在列表上直接调用这些函数。


2
你能包含使用方法吗? - ScottyBlades

5

虽然上面的回答都是有效的,但如果你要遍历一个字典 {key:value},这是我喜欢使用的方法:

for key, value in Dictionary.items():
    print(key, value)

因此,如果我想要对字典中的所有键和值进行字符串化处理,我会这样做:
stringified_dictionary = {}
for key, value in Dictionary.items():
    stringified_dictionary.update({str(key): str(value)})
return stringified_dictionary

这样做可以避免在应用此类型的迭代时出现任何突变问题,这可能会导致不稳定的行为(有时)在我的经验中。

一个更易读的替代方法是迭代字典的copy,这样你可以在迭代过程中操作字典(尽管你的副本将是在任何修改之前的所有键和值)--像for key, value in Dictionary.copy().items() - Marc Maxmeister
你是指 stringified_dictionary.items() 对吧? - Matt

4

对于一个字典,我们可以使用for循环来遍历indexkeyvalue

dictionary = {'a': 0, 'z': 25}
for index, (key, value) in enumerate(dictionary.items()):
     ## Code here ##

3

foreach 结构不幸地不是集合本身的内在部分,而是外在的。结果有两个方面:

  • 它不能被链接
  • 使用惯用的Python需要两行代码。

Python 不直接支持对集合的真正 foreach。一个例子是:

myList.foreach( a => print(a)).map( lambda x:  x*2) # python can't do this..

但是Python并不支持这个功能。有许多第三方库提供了对Python中一些遗漏的函数性特征的部分解决方案,其中包括我参与编写的一个库:请查看https://pypi.org/project/infixpy/


1
展示一个不支持的功能的代码片段几乎没有什么用处,有点具有误导性。 - Ali Cheaito
我在代码片段前后提供了描述,说明这是可能提供的内容(但实际上并没有)。这种做法很常见。其有用之处在于清楚地说明真正的_foreach_结构是什么。 - WestCoastProjects

0
这对我有用:
def smallest_missing_positive_integer(A):
A.sort()
N = len(A)

now = A[0]
for i in range(1, N, 1):
  next = A[i]
  
  #check if there is no gap between 2 numbers and if positive
  # "now + 1" is the "gap"
  if (next > now + 1):
    if now + 1 > 0:
      return now + 1 #return the gap
  now = next
    
return max(1, A[N-1] + 1) #if there is no positive number returns 1, otherwise the end of A+1

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