वहाँ इस तरह अजगर में एक पत्र रेंज करने के लिए एक रास्ता है:क्या पाइथन में एक अक्षर सीमा बनाना संभव है?
for x in range(a,h,)
वहाँ इस तरह अजगर में एक पत्र रेंज करने के लिए एक रास्ता है:क्या पाइथन में एक अक्षर सीमा बनाना संभव है?
for x in range(a,h,)
आप ord()
उपयोग कर सकते हैं चरित्र ऑर्डिनल्स में पत्र को परिवर्तित करने और वापस करने के लिए:
def char_range(start, end, step=1):
for char in range(ord(start), ord(end), step):
yield chr(char)
यह सिर्फ अच्छा काम करने लगता है :
>>> ''.join(char_range('a', 'z'))
'abcdefghijklmnopqrstuvwxy'
कोई पत्र रेंज में बनाया गया है, लेकिन आप लिख सकते हैं एक:
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,
प्रिंट:
a b c d e f g
कुछ की तरह:
for x in [chr(i) for i in range(ord('a'),ord('h')]
(या शायद:
for x in map(chr, range(*map(ord,['a', 'h'])))
)
ध्यान दें कि इसमें अंतिम अक्षर शामिल नहीं है, इसलिए यदि आप संपूर्ण वर्णमाला करना चाहते हैं तो आप कुछ ऐसा करेंगे: [chr (i) के लिए मैं रेंज में (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'))
परिणाम
a b c d e f g
इस (जो पत्र शामिल किए गए हैं और आप आसानी से अनुकूलित कर सकते हैं, और किस क्रम में) मेरे कम से कम/पढ़ने के लिए समझ में आसान है:
letters = 'abcdefghijklmnopqrstuvwxyz'
for each in letters:
print each
result:
a
b
c
...
z
... साइट पर नया, मैं कोड कोड को सही तरीके से कैसे दिखूं? (जैसा कि मैंने उपरोक्त रखा है?) – Joey
कोड का चयन करें और '{}' बटन दबाएं, या प्रत्येक कोड लाइन को कम से कम चार रिक्त स्थान दें – user3288829
इमानुएल के समाधान के रूप में महान है जब तक कि केवल एक ही वर्ण की एक श्रृंखला मांगे, जिसे मैं स्वीकार करूंगा वह मूल प्रश्नकर्ता है। सभी बहु-चरित्र संयोजन उत्पन्न करने के लिए वहां समाधान भी हैं: How to generate a range of strings from aa... to zz। हालांकि मुझे संदेह है कि कोई भी जो रेंज फ़ंक्शन जैसे चरित्र चाहता है, वह 'y' से 'af' ('z' से 'aa' तक रोलिंग) से मनमाने ढंग से रेंज उत्पन्न करने में सक्षम होना चाहता है। तो यहां एक और सामान्य समाधान है जिसमें सीमा या उसके लंबाई के अंतिम सदस्य को निर्दिष्ट करने की क्षमता शामिल है।
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()
के संभावित dup http://stackoverflow.com/questions/7001144/range-over-character-in-python और http://stackoverflow.com/questions/3190122/python-how-to-print -रेंज-एज़ (जिनमें से प्रत्येक के बहुत अच्छे जवाब हैं) – fantabolous