Jawaban:
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()
:
>>> for i, c in enumerate('test'):
... print i, c
...
0 t
1 e
2 s
3 t
1 t
, 2 e
, 3 s
, 4 t
menggunakan parameter "start":for i, c in enumerate('test', start=1)
Lebih mudah lagi:
for c in "test":
print c
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.
i = 0
while i < len(str):
print str[i]
i += 1
Tetapi sekali lagi, mengapa itu dilakukan ketika string secara inheren dapat diubah?
for i in str:
print i
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 gunakan xrange()
dalam kasus-kasus itu. Juga, pengindeksan berulang pada string yang sama jauh lebih lambat daripada iterasi langsung di atas string. Jika Anda membutuhkan indeks, gunakan enumerate()
.
Anda juga dapat melakukan sesuatu yang menarik seperti ini dan melakukan pekerjaan Anda dengan menggunakan for loop
#suppose you have variable name
name = "Mr.Suryaa"
for index in range ( len ( name ) ):
print ( name[index] ) #just like c and c++
Jawabannya adalah
Pak . S uryaa
Namun karena rentang () buat daftar nilai yang berurutan sehingga Anda dapat langsung menggunakan namanya
for e in name:
print(e)
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
for i in range ( 5 ) :
can produce 0 , 1 , 2 , 3 , 4
2) len () - len () BIF digunakan untuk mengetahui panjang string yang diberikan
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:
>>> ''.join(map(lambda x: chr(ord(x)+1), "HAL"))
'IBM'
atau lebih umum:
>>> ''.join(map(my_function, my_string))
di mana my_function mengambil nilai char dan mengembalikan nilai char.
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.
Jika Anda pernah berlari dalam situasi di mana Anda perlu get the next char of the word using __next__()
, ingatlah untuk membuat string_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
myString = "'string' 4 '['RP0', 'LC0']' '[3, 4]' '[3, '4']'"
processedInput = ""
word_iterator = myString.__iter__()
for idx, char in enumerate(word_iterator):
if char == "'":
continue
processedInput+=char
if char == '[':
next_char=word_iterator.__next__()
while(next_char != "]"):
processedInput+=next_char
next_char=word_iterator.__next__()
else:
processedInput+=next_char