Czy istnieje sposób, aby zrobić szereg się w pytona tak:Czy można utworzyć zakres liter w pythonie?
for x in range(a,h,)
Czy istnieje sposób, aby zrobić szereg się w pytona tak:Czy można utworzyć zakres liter w pythonie?
for x in range(a,h,)
Można użyć ord()
konwertować litery do porządkowych znakowych i tył:
def char_range(start, end, step=1):
for char in range(ord(start), ord(end), step):
yield chr(char)
Wydaje się działać dobrze :
>>> ''.join(char_range('a', 'z'))
'abcdefghijklmnopqrstuvwxy'
nie ma wbudowany w zakresie list, ale można napisać jedno:
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,
drukuje:
a b c d e f g
podobnie jak:
for x in [chr(i) for i in range(ord('a'),ord('h')]
(lub może:
for x in map(chr, range(*map(ord,['a', 'h'])))
)
Pamiętaj, że nie zawiera to ostatniej litery, więc jeśli chcesz zrobić cały alfabet, możesz zrobić coś takiego: [chr (i) dla i w zakresie (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'))
wynik
a b c d e f g
jest to łatwiejsze dla mnie przynajmniej do odczytu/zrozumieć (i można łatwo dostosować listów, które są wliczone w cenę, w jakiej kolejności):
letters = 'abcdefghijklmnopqrstuvwxyz'
for each in letters:
print each
result:
a
b
c
...
z
... nowy na stronie, jak zrobić, aby blok kodu wyglądał poprawnie? (w przeciwieństwie do tego, co umieściłem powyżej?) – Joey
wybierz kod i naciśnij przycisk '{}' lub wcięcie każdej linii kodu co najmniej czterema spacjami – user3288829
rozwiązanie Emanuele jest wielka, jak tak długo, jak się tylko prosi o szereg pojedynczych znaków, co przyznaję, jest tym, co zadał pierwotny pytający. Istnieją również rozwiązania, które umożliwiają generowanie wszystkich kombinacji wielu znaków: How to generate a range of strings from aa... to zz. Podejrzewam jednak, że ktoś, kto chce takiej postaci, jak funkcja zakresu, może chcieć poradzić sobie z generowaniem dowolnego zakresu od "y" do "af" (przechodzenie z "z" na "aa"). Oto ogólne rozwiązanie, które obejmuje możliwość określenia ostatniego członka zakresu lub jego długości.
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()
możliwe dup z http://stackoverflow.com/questions/7001144/range-over-character-in-python i http://stackoverflow.com/questions/3190122/python-how-to-print -range-az (z których każdy ma wiele dobrych odpowiedzi) – fantabolous