Python foreach等价

Bil*_*ill 154 python foreach

我正在深入研究Python,我对foreach迭代有疑问.我是Python的新手,我在C#方面有一些经验.所以我想知道,如果我的集合中的所有项目都有Python中的等效函数用于迭代,例如

pets = ['cat', 'dog', 'fish']
marks = [ 5, 4, 3, 2, 1]
Run Code Online (Sandbox Code Playgroud)

或类似的东西.

Han*_*nnu 236

当然.一个for循环.

for f in pets:
    print f
Run Code Online (Sandbox Code Playgroud)

  • 然后你会使用枚举.`for k,v in enumerate(pets):`etc. (19认同)
  • 不幸的是,这种构造不是集合固有的,而是集合外部的。结果有两个:(1)它不能被链接(2)它需要惯用的Python中的两行。Python 不直接支持集合上真正的“foreach”。或一般的链接。一个例子是``myList.foreach( a => print(a)).map( lambda x: x*2)`。 (3认同)

Jac*_*ley 27

像这样:

for pet in pets :
  print(pet)
Run Code Online (Sandbox Code Playgroud)

事实上,Python 只有 foreach样式for循环.


kri*_*hna 8

观察这一点也很有趣

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

a = ['Mary', 'had', 'a', 'little', 'lamb']
for i in range(len(a)):
  print(i, a[i])
Run Code Online (Sandbox Code Playgroud)

输出

0 Mary
1 had
2 a
3 little
4 lamb
Run Code Online (Sandbox Code Playgroud)

编辑#1:替代方式:

在序列中循环时,可以使用该enumerate()功能同时检索位置索引和相应的值。

for i, v in enumerate(['tic', 'tac', 'toe']):
  print(i, v)
Run Code Online (Sandbox Code Playgroud)

输出

0 tic
1 tac
2 toe
Run Code Online (Sandbox Code Playgroud)


Rob*_*ell 8

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

def forEach(list, function):
    for i, v in enumerate(list):
        function(v, i, list)
Run Code Online (Sandbox Code Playgroud)

您还可以将其调整为mapreducefilter和来自其他语言的任何其他数组函数或您想要引入的优先级。For 循环足够快,但样板代码比forEach或 其他函数长。您还可以扩展 list 使这些函数具有指向类的本地指针,以便您也可以直接在列表上调用它们。

  • 你能包括用法吗? (2认同)

小智 6

虽然上面的答案是有效的,但如果您要迭代字典 {key:value} ,这是我喜欢使用的方法:

for key, value in Dictionary.items():
    print(key, value)
Run Code Online (Sandbox Code Playgroud)

因此,如果我想做一些诸如字符串化字典中的所有键和值之类的事情,我会这样做:

stringified_dictionary = {}
for key, value in Dictionary.items():
    stringified_dictionary.update({str(key): str(value)})
return stringified_dictionary
Run Code Online (Sandbox Code Playgroud)

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


jav*_*dba 5

不幸的是,该foreach构造不是集合固有的,而是集合外部的。结果有两个:

  • 它不能被链接
  • 它需要惯用的 python 中的两行。

Python 不foreach直接支持集合上的 true。一个例子是

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

但是python不支持。各种第三方库提供了对 python 中此功能和其他缺失功能功能的部分修复,其中包括我帮助创作的一个:请参阅https://pypi.org/project/infixpy/