Python foreach setara

191

Saya menyelam ke Python dan saya memiliki pertanyaan tentang iterasi foreach. Saya baru mengenal Python dan saya memiliki pengalaman dalam C #. Jadi saya bertanya-tanya, apakah ada beberapa fungsi setara di Python untuk iterasi di semua item dalam koleksi saya, mis

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

atau sesuatu seperti ini.

Tagihan
sumber
2
Kemungkinan duplikat dari Apakah ada fungsi 'foreach' di Python 3?
Stephan Weinhold

Jawaban:

294

Tentu. A untuk loop.

for f in pets:
    print f
Hannu
sumber
Bagaimana kalau saya harus tahu indeks / kunci juga?
Candjack
25
Maka Anda akan menggunakan enumerate. for k,v in enumerate(pets): dll.
Hannu
30

Seperti ini:

for pet in pets :
  print(pet)

Bahkan, Python hanya memiliki forloop gaya foreach .

Jack Aidley
sumber
12

Ini juga menarik untuk diamati

Untuk beralih pada indeks urutan, Anda dapat menggabungkan range()dan len()sebagai berikut:

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

keluaran

0 Mary
1 had
2 a
3 little
4 lamb

Sunting # 1: Cara alternatif:

Saat mengulang melalui urutan, indeks posisi dan nilai yang sesuai dapat diambil pada saat yang sama menggunakan enumerate()fungsi.

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

keluaran

0 tic
1 tac
2 toe
krishna
sumber
4

Untuk jawaban yang diperbarui, Anda dapat membangun forEachfungsi dengan Python dengan mudah:

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

Anda juga bisa beradaptasi ini untuk map, reduce, filter, dan setiap fungsi array lain dari bahasa lain atau didahulukan Anda ingin membawa lebih. Untuk loop cukup cepat, tetapi pelat ketel lebih panjang dari forEachatau fungsi lainnya. Anda juga dapat memperluas daftar untuk memiliki fungsi-fungsi ini dengan pointer lokal ke kelas sehingga Anda dapat memanggilnya langsung pada daftar juga.

Robert Mennell
sumber
1
Bisakah Anda memasukkan penggunaan?
ScottyBlades
3

Meskipun jawaban di atas valid, jika Anda mengulangi dict {key: value}, ini adalah pendekatan yang ingin saya gunakan:

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

Karenanya, jika saya ingin melakukan sesuatu seperti merangkai semua kunci dan nilai dalam kamus saya, saya akan melakukan ini:

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

Ini menghindari masalah mutasi saat menerapkan jenis iterasi ini, yang dapat menyebabkan perilaku tidak menentu (kadang-kadang) dalam pengalaman saya.

Marc Tanne
sumber
Alternatif yang lebih mudah dibaca adalah beralih ke lebih copydari satu kamus, sehingga Anda dapat memanipulasi kamus selama iterasi (meskipun salinan Anda akan dari semua kunci dan nilai sebelum modifikasi apa pun) - sepertifor key, value in Dictionary.copy().items()
Marc Maxmeister
1

Untuk dict kita dapat menggunakan loop for untuk beralih melalui index, keydan value:

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