में संख्याओं की सूची से स्वरूपित संख्यात्मक रेंज स्ट्रिंग को प्रिंट करना मैंने चरण वर्ग को अनुक्रमित करने के लिए संख्या सूचियों को संकुचित और विस्तारित करने के लिए लिखा है, चरण चरण समेत चरण मान 1 से अधिक है। कोड अभी भी घबराहट महसूस करता है। क्या ऐसे पुस्तकालय हैं जो ऐसा कुछ कर सकते हैं? संभवतः सरल कोड?पायथन
import re
class Foo(object):
def __init__(self, num_list):
self.num_list = sorted(list(set([ int(n) for n in num_list ])))
# end def __init__
def gen_seq_data(self):
self.seq_data = list()
index_offset = None
backward_step_value = None
forward_step_value = None
sub_list = list()
sub_list_step_value = None
for index, num in enumerate(self.num_list):
if index - 1 < 0:
backward_step_value = None
# end if
else:
backward_step_value = num - self.num_list[ index - 1 ]
# end else
try:
forward_step_value = self.num_list[ index + 1 ] - num
# end try
except IndexError:
forward_step_value = None
# end except
if backward_step_value is None:
sub_list.append(num)
# end if
elif backward_step_value == forward_step_value:
sub_list.append(num)
if forward_step_value is None:
self.seq_data.append((sub_list_step_value, sub_list))
# end if
# end if
elif backward_step_value == sub_list_step_value:
sub_list.append(num)
if sub_list:
self.seq_data.append((sub_list_step_value, sub_list))
# end if
sub_list = list()
# end elif
else:
if sub_list:
self.seq_data.append((sub_list_step_value, sub_list))
# end if
sub_list = [ num ]
if forward_step_value is None:
self.seq_data.append((sub_list_step_value, sub_list))
# end if
# end else
try:
sub_list_step_value = sub_list[ -1 ] - sub_list[ -2 ]
# end try
except IndexError:
sub_list_step_value = None
# end except
# end for
# end def gen_seq_object
def format_elements(self):
format_elements = list()
for step, num_list in self.seq_data:
if step is None:
format_elements.append('%s' % (num_list[ 0 ]))
# end if
elif step == 1:
format_elements.append('%s-%s' % (num_list[ 0 ], num_list[ -1 ]))
# end elif
else:
format_elements.append('%s-%sx%s' % (num_list[ 0 ], num_list[ -1 ], step))
# end else
# end for
return format_elements
# end def format_range
def format_range(self):
return ','.join(self.format_elements())
# end def format_range
def expand_range(self):
num_list = list()
for r_token in self.format_range().split(','):
if r_token.isdigit():
num_list.append(int(r_token))
# end if
elif '-' in r_token:
if 'x' in r_token:
start, end, step = re.split(r'[-|x]', r_token)
num_list.extend(range(int(start), int(end) + 1, int(step)))
# end if
else:
start, end = r_token.split('-')
num_list.extend(range(int(start), int(end) + 1))
# end else
# end elif
# end for
return num_list
# end def expand_range
# end class Foo
इनपुट/आउटपुट:
data = [ 1, 4, 5, 6, 10, 15, 16, 17, 18, 20, 22, 24, 26, 27, 28, 30, 35, 40, 45, 50, 56, 63, 66, 69, 72 ]
foo = Foo(data)
foo.gen_seq_data()
print data
print foo.format_range()
1,4-6,10,15-18,20-26x2,27,28,30-50x5,56,63-72x3
print foo.expand_range()
[1, 4, 5, 6, 10, 15, 16, 17, 18, 20, 22, 24, 26, 27, 28, 30, 35, 40, 45, 50, 56, 63, 66, 69, 72]
कृपया अपना ठीक करें खरोज। आपका कोड गलत तरीके से स्वरूपित है। कृपया (1) प्रश्न संपादित करें, (2) पृष्ठ के दाईं ओर स्वरूपण निर्देश पढ़ें और (3) आपके पास मौजूद कोड के प्रत्येक टुकड़े को पोस्ट करने से बचें। आपके पास ** समस्या ** क्या है? कोड का सबसे छोटा टुकड़ा क्या है जो यह ** समस्या ** दिखाता है? –
@ user494203: "# end if" आदि लाइनों को फेंक दें; वे राक्षसी रूप से बेकार हैं, खासकर वे जो 'एलिफ' और 'else' से पहले होते हैं। यदि आप ऐसा करते हैं, तो लोग आपके कोड को पढ़ने और आगे के अनधिकृत सुझाव देने के इच्छुक हो सकते हैं। –