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.


Jawaban:


294

Tentu. A untuk loop.

for f in pets:
    print f

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 .


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

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.


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.


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 ##
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.