Python foreach tương đương


188

Tôi đang đi sâu vào Python và tôi có một câu hỏi về lặp đi lặp lại. Tôi chưa quen với Python và tôi có một số kinh nghiệm về C #. Vì vậy, tôi tự hỏi, nếu có một số chức năng tương đương trong Python để lặp lại tất cả các mục trong bộ sưu tập của tôi, ví dụ:

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

hoặc thứ gì đó giống thế này.


Câu trả lời:


288

Chắc chắn rồi. Một vòng lặp cho.

for f in pets:
    print f

Còn nếu tôi phải biết chỉ số / khóa thì sao?
nến

24
Sau đó, bạn sẽ sử dụng liệt kê. for k,v in enumerate(pets): vv
Hannu

30

Như thế này:

for pet in pets :
  print(pet)

Trong thực tế, Python chỉforcác vòng lặp kiểu foreach .


12

Thật thú vị khi quan sát điều này

Để lặp lại các chỉ số của một chuỗi, bạn có thể kết hợp range()len()như sau:

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

đầu ra

0 Mary
1 had
2 a
3 little
4 lamb

Chỉnh sửa # 1: Cách thay thế:

Khi lặp qua một chuỗi, chỉ số vị trí và giá trị tương ứng có thể được truy xuất cùng lúc bằng cách sử dụng enumerate()hàm.

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

đầu ra

0 tic
1 tac
2 toe

4

Để có câu trả lời cập nhật, bạn có thể forEachdễ dàng xây dựng một hàm trong Python:

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

Bạn cũng có thể thích ứng này để map, reduce, filter, và bất kỳ chức năng mảng khác từ các ngôn ngữ hoặc ưu tiên khác mà bạn muốn để mang lại kết thúc. Đối với các vòng là đủ nhanh, nhưng tấm nồi hơi dài hơn forEachhoặc các chức năng khác. Bạn cũng có thể mở rộng danh sách để có các hàm này với một con trỏ cục bộ đến một lớp để bạn có thể gọi chúng trực tiếp trên danh sách.


1
Bạn có thể bao gồm sử dụng xin vui lòng?
ScottyBlades

3

Mặc dù các câu trả lời ở trên là hợp lệ, nhưng nếu bạn đang lặp lại một lệnh {key: value} thì đây là cách tiếp cận tôi muốn sử dụng:

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

Do đó, nếu tôi muốn làm một cái gì đó như xâu chuỗi tất cả các khóa và giá trị trong từ điển của mình, tôi sẽ làm điều này:

stringified_dictionary = {}
for key, value in Dictionary.items():
    stringified_dictionary.update({str(key): str(value)})
return stringified_dictionary

Điều này tránh mọi vấn đề đột biến khi áp dụng kiểu lặp này, có thể gây ra hành vi thất thường (đôi khi) theo kinh nghiệm của tôi.


Một thay thế dễ đọc hơn cho điều này là lặp lại một copytừ điển, vì vậy bạn có thể thao tác từ điển trong khi lặp (mặc dù bản sao của bạn sẽ có tất cả các khóa và giá trị trước khi sửa đổi) - nhưfor key, value in Dictionary.copy().items()
Marc Maxmeister

1

Đối với một dict, chúng ta có thể sử dụng một vòng lặp for để lặp qua index, keyvalue:

dictionary = {'a': 0, 'z': 25}
for index, (key, value) in enumerate(dictionary.items()):
     ## Code here ##
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.