Bir karakter dizisine bir dize bölme cevapları için web etrafına bakmaya çalıştım ama basit bir yöntem bulamıyorum
str.split(//)
Ruby gibi çalışıyor gibi görünmüyor. Bunu döngü olmadan yapmanın basit bir yolu var mı?
Bir karakter dizisine bir dize bölme cevapları için web etrafına bakmaya çalıştım ama basit bir yöntem bulamıyorum
str.split(//)
Ruby gibi çalışıyor gibi görünmüyor. Bunu döngü olmadan yapmanın basit bir yolu var mı?
Yanıtlar:
>>> s = "foobar"
>>> list(s)
['f', 'o', 'o', 'b', 'a', 'r']
Listeye ihtiyacınız var
cast_method = lambda x: [x]
Dizeyi alıp listeye geçirirsiniz ()
s = "mystring"
l = list(s)
print l
Bunu listeden çok basit bir şekilde de yapabilirsiniz ():
>>> [c for c in "foobar"]
['f', 'o', 'o', 'b', 'a', 'r']
for
, açıklanacak çok şey yok. Veri yapıları , özellikle de liste kavraması üzerine python öğreticisini okumalısınız .
list(map(lambda c: c, iter("foobar")))
, ancak daha okunabilir ve anlamlı.
Dizenizi her seferinde bir karakter işlemek istiyorsanız. çeşitli seçenekleriniz var.
uhello = u'Hello\u0020World'
Liste anlama özelliğini kullanma:
print([x for x in uhello])
Çıktı:
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
Haritayı kullanarak:
print(list(map(lambda c2: c2, uhello)))
Çıktı:
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
Dahili liste fonksiyonu çağırma:
print(list(uhello))
Çıktı:
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
Döngü için kullanma:
for c in uhello:
print(c)
Çıktı:
H
e
l
l
o
W
o
r
l
d
Bu görevi yerine getirmenin iki yolunu daha araştırdım. Birisi için yararlı olabilir.
İlki kolaydır:
In [25]: a = []
In [26]: s = 'foobar'
In [27]: a += s
In [28]: a
Out[28]: ['f', 'o', 'o', 'b', 'a', 'r']
Ve ikincisi kullanım map
ve lambda
işlev. Daha karmaşık görevler için uygun olabilir:
In [36]: s = 'foobar12'
In [37]: a = map(lambda c: c, s)
In [38]: a
Out[38]: ['f', 'o', 'o', 'b', 'a', 'r', '1', '2']
Örneğin
# isdigit, isspace or another facilities such as regexp may be used
In [40]: a = map(lambda c: c if c.isalpha() else '', s)
In [41]: a
Out[41]: ['f', 'o', 'o', 'b', 'a', 'r', '', '']
Daha fazla yöntem için python belgelerine bakın
Görev, dizenin karakterleri üzerinde yineleme yapmak ve bunları bir liste halinde toplamak için kaynar. En naif çözüm,
result = []
for character in string:
result.append(character)
Tabii ki, sadece kısaltılabilir
result = [character for character in string]
ama yine de aynı şeyi yapan daha kısa çözümler var.
list
yapıcı herhangi bir yinelenebilir dönüştürmek için kullanılabilir (yineleyiciler, listeler, tuples, dize vb.) listeye .
>>> list('abc')
['a', 'b', 'c']
Büyük artı, hem Python 2 hem de Python 3'te aynı şekilde çalışmasıdır.
Ayrıca, Python 3.5'ten başlayarak (harika PEP 448 sayesinde ), boş bir liste hazır bilgisine paketini açarak herhangi bir yinelemeden bir liste oluşturmak artık mümkün:
>>> [*'abc']
['a', 'b', 'c']
Bu daha temiz ve bazı durumlarda aramaktan daha verimli list
doğrudan yapıcı .
Ben kullanmanızı tavsiye etmiyoruz map
, çünkü merkezli yaklaşımlar map
yok değil Python 3. See bir listesini döndürür kullanım filtresi, haritaya nasıl, ve Python 3'te azaltmak .
split()
dahili işlev, değeri yalnızca belirli koşullara göre ayırır, ancak tek kelimeyle koşulu yerine getiremez. Böylece, yardımıyla çözülebilirlist()
. Dahili olarak Array öğesini çağırır ve değeri bir dizi temelinde depolar.
, varsayalım
a = "bottle"
a.split() // will only return the word but not split the every single char.
a = "bottle"
list(a) // will separate ['b','o','t','t','l','e']
Bunları paketinden çıkarın:
word = "Paralelepipedo"
print([*word])
Dizeye yalnızca erişimi okumak istiyorsanız, doğrudan dizi gösterimini kullanabilirsiniz.
Python 2.7.6 (default, Mar 22 2014, 22:59:38)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> t = 'my string'
>>> t[1]
'y'
Normal ifade kullanmadan test için yararlı olabilir. Dize bir bitiş yeni satırı içeriyor mu?
>>> t[-1] == '\n'
False
>>> t = 'my string\n'
>>> t[-1] == '\n'
True
Peki, liste (ler) sürümünü sevdiğim kadar, işte bulduğum başka bir daha ayrıntılı yol (ama havalı, bu yüzden onu fray'a ekleyeceğimi düşündüm):
>>> text = "My hovercraft is full of eels"
>>> [text[i] for i in range(len(text))]
['M', 'y', ' ', 'h', 'o', 'v', 'e', 'r', 'c', 'r', 'a', 'f', 't', ' ', 'i', 's', ' ', 'f', 'u', 'l', 'l', ' ', 'o', 'f', ' ', 'e', 'e', 'l', 's']
camelcase = ''.join([text[i].upper() if i % 2 else text[i].lower() for i in range(len(text))])
from itertools import chain
string = 'your string'
chain(string)
benzer list(string)
ancak kullanım noktasında tembel olarak değerlendirilen bir jeneratörü döndürür, bu nedenle bellek verimlidir.
>>> for i in range(len(a)):
... print a[i]
...
burada a, ayırmak istediğiniz dizedir. "A [i]" değerleri, bir listeye eklenebilecek dizenin tek tek karakteridir.
for c in a: print c
çok daha doğrudan