böyle python yazmak aralığını yapmak için bir yolu var mı:Python'da bir harf aralığı yapmak mümkün mü?
for x in range(a,h,)
böyle python yazmak aralığını yapmak için bir yolu var mı:Python'da bir harf aralığı yapmak mümkün mü?
for x in range(a,h,)
Sen karakter ordinals içine harfleri dönüştürmek ve yedeklemek için ord()
kullanabilirsiniz:
def char_range(start, end, step=1):
for char in range(ord(start), ord(end), step):
yield chr(char)
Sadece iyi çalışıyor görünüyor :
>>> ''.join(char_range('a', 'z'))
'abcdefghijklmnopqrstuvwxy'
harf yok aralığında inşa yoktur, ancak yazabilir biri:
def letter_range(start, stop):
for c in xrange(ord(start), ord(stop)):
yield chr(c)
for x in letter_range('a', 'h'):
print x,
baskılar:
a b c d e f g
şey gibi:
for x in [chr(i) for i in range(ord('a'),ord('h')]
(ya da belki:
for x in map(chr, range(*map(ord,['a', 'h'])))
)
Bu son harfi içermediğini unutmayın, bu nedenle eğer tüm alfabeyi yapmak isterseniz, aşağıdaki gibi bir şey yaparsınız: [chr (i) Ben aralıkta (ord ('a'), ord ('z') + 1] – seddonym
import string
def letter_range(f,l,al = string.ascii_lowercase):
for x in al[al.index(f):al.index(l)]:
yield x
print ' '.join(letter_range('a','h'))
sonuç
a b c d e f g
bu beni en azından okuma/anlama için (ve kolayca özelleştirebilirsiniz dahil hangi harfleri ve hangi sırayla) daha kolaydır:
letters = 'abcdefghijklmnopqrstuvwxyz'
for each in letters:
print each
result:
a
b
c
...
z
... siteye yeni, nasıl bir kod bloğu doğru bir şekilde görünebilirim? (Yukarıda yazdığımın aksine) – Joey
kodu seçin ve '{}' düğmesine basın veya her kod satırını en az dört boşluk girintisine – user3288829
Emanuele çözümü olarak büyük Biri sadece tek bir karakter için sorduğum sürece, itiraf edeceğim orijinal sorgunun ne olduğudır. Tüm çok karakterli kombinasyonları üretmek için orada çözümler de var: How to generate a range of strings from aa... to zz. Bununla birlikte, menzil işlevi gibi bir karakter isteyen birinin, 'y' den 'af' ye ('z' den 'aa' ye yuvarlanarak) keyfi bir aralık oluşturmakla uğraşmak isteyebileceğinden şüpheleniyorum. Bu yüzden, ya aralığın son üyesini ya da uzunluğunu belirtme yeteneğini içeren daha genel bir çözüm. arasında
def strange(start, end_or_len, sequence='ABCDEFGHIJKLMNOPQRSTUVWXYZ'):
"""Create a generator of a range of 'sequential' strings from
start to end_or_len if end_or_len is a string or containing
end_or_len entries if end_or_len is an integer.
>>> list(strange('D', 'F'))
['D', 'E', 'F']
>>> list(strange('Y', 'AB'))
['Y', 'Z', 'AA', 'AB']
>>> list(strange('Y', 4))
['Y', 'Z', 'AA', 'AB']
>>> list(strange('A', 'BAA', sequence='AB'))
['A', 'B', 'AA', 'AB', 'BA', 'BB', 'AAA', 'AAB', 'ABA', 'ABB', 'BAA']
>>> list(strange('A', 11, sequence='AB'))
['A', 'B', 'AA', 'AB', 'BA', 'BB', 'AAA', 'AAB', 'ABA', 'ABB', 'BAA']
"""
seq_len = len(sequence)
start_int_list = [sequence.find(c) for c in start]
if isinstance(end_or_len, int):
inclusive = True
end_int_list = list(start_int_list)
i = len(end_int_list) - 1
end_int_list[i] += end_or_len - 1
while end_int_list[i] >= seq_len:
j = end_int_list[i] // seq_len
end_int_list[i] = end_int_list[i] % seq_len
if i == 0:
end_int_list.insert(0, j-1)
else:
i -= 1
end_int_list[i] += j
else:
end_int_list = [sequence.find(c) for c in end_or_len]
while len(start_int_list) < len(end_int_list) or start_int_list <= end_int_list:
yield ''.join([sequence[i] for i in start_int_list])
i = len(start_int_list)-1
start_int_list[i] += 1
while start_int_list[i] >= seq_len:
start_int_list[i] = 0
if i == 0:
start_int_list.insert(0,0)
else:
i -= 1
start_int_list[i] += 1
if __name__ =='__main__':
import doctest
doctest.testmod()
olası dup http://stackoverflow.com/questions/7001144/range-over-character-in-python ve http://stackoverflow.com/questions/3190122/python-how-to-print -range-az (her biri çok iyi cevapları vardır) – fantabolous