Di C ++, saya bisa mengulangi std::string
seperti ini:
std::string str = "Hello World!";
for (int i = 0; i < str.length(); ++i)
{
std::cout << str[i] << std::endl;
}
Bagaimana cara saya mengulangi string dengan Python?
Seperti yang ditunjukkan oleh Yohanes,
for c in "string":
#do something with c
Anda dapat melakukan iterasi pada python menggunakan for loop
konstruk,
misalnya, open("file.txt")
mengembalikan objek file (dan membuka file), iterate iterate iterates over lines dalam file itu
with open(filename) as f:
for line in f:
# do something with line
Jika itu tampak seperti sulap, ya memang begitu, tetapi ide di baliknya sangat sederhana.
Ada protokol iterator sederhana yang dapat diterapkan ke segala jenis objek untuk membuat for
loop bekerja di sana.
Cukup menerapkan iterator yang mendefinisikan next()
metode, dan mengimplementasikan __iter__
metode pada kelas untuk membuatnya iterable. ( __iter__
tentu saja, harus mengembalikan objek iterator, yaitu objek yang mendefinisikan next()
)
Jika Anda memerlukan akses ke indeks saat Anda mengulanginya melalui string, gunakan
enumerate()
:sumber
1 t
,2 e
,3 s
,4 t
menggunakan parameter "start":for i, c in enumerate('test', start=1)
Lebih mudah lagi:
sumber
for c in "test": print (c)
Mengapa?Hanya untuk membuat jawaban yang lebih komprehensif, cara C mengulangi string dapat diterapkan dengan Python, jika Anda benar-benar ingin memaksa pasak persegi ke dalam lubang bundar.
Tetapi sekali lagi, mengapa itu dilakukan ketika string secara inheren dapat diubah?
sumber
for i in range(len(...))
itu jahat. Dalam python 2.x,range()
membuat daftar, jadi untuk waktu yang sangat lama Anda mungkin akhirnya mengalokasikan blok memori yang sangat besar. Paling tidak gunakanxrange()
dalam kasus-kasus itu. Juga, pengindeksan berulang pada string yang sama jauh lebih lambat daripada iterasi langsung di atas string. Jika Anda membutuhkan indeks, gunakanenumerate()
.Anda juga dapat melakukan sesuatu yang menarik seperti ini dan melakukan pekerjaan Anda dengan menggunakan for loop
Jawabannya adalah
Pak . S uryaa
Namun karena rentang () buat daftar nilai yang berurutan sehingga Anda dapat langsung menggunakan namanya
Ini juga menghasilkan hasil yang sama dan juga terlihat lebih baik dan berfungsi dengan urutan seperti daftar, tupel, dan kamus.
Kami telah menggunakan fungsi Built in Built (BIFs in Python Community)
1) range () - range () BIF digunakan untuk membuat indeks Contoh
2) len () - len () BIF digunakan untuk mengetahui panjang string yang diberikan
sumber
Jika Anda ingin menggunakan pendekatan yang lebih fungsional untuk mengulangi string (mungkin untuk mengubahnya entah bagaimana), Anda dapat membagi string menjadi karakter, menerapkan fungsi untuk masing-masing, kemudian bergabung dengan daftar karakter yang dihasilkan kembali ke dalam string.
Sebuah string pada dasarnya adalah daftar karakter, maka 'peta' akan beralih di atas string - sebagai argumen kedua - menerapkan fungsi - argumen pertama - untuk masing-masing karakter.
Misalnya, di sini saya menggunakan pendekatan lambda sederhana karena semua yang ingin saya lakukan adalah modifikasi sepele untuk karakter: di sini, untuk menambah setiap nilai karakter:
atau lebih umum:
di mana my_function mengambil nilai char dan mengembalikan nilai char.
sumber
Beberapa jawaban di sini digunakan
range
.xrange
umumnya lebih baik karena mengembalikan generator, daripada daftar yang sepenuhnya instantiated. Di mana memori dan atau iterables dari berbagai panjang dapat menjadi masalah,xrange
lebih unggul.sumber
Jika Anda pernah berlari dalam situasi di mana Anda perlu
get the next char of the word using __next__()
, ingatlah untuk membuatstring_iterator
dan mengulanginya dan bukanoriginal string (it does not have the __next__() method)
Dalam contoh ini, ketika saya menemukan char =
[
saya terus mencari kata berikutnya sementara saya tidak menemukan]
, jadi saya perlu menggunakan __next__di sini untuk loop atas string tidak akan membantu
sumber