我有一个指示值范围的字符串:"A1C - A1H"
我需要能够创建该范围内所有值的列表,这意味着:['A1C', 'A1D', 'A1E', 'A1F', 'A1G', 'A1H']
list = []
range = "A1C - A1H"
code = range[:2]
range_end = range[-3:]
for letter in ascii_uppercase:
order = code+letter
if order not in range_end:
list.append(order)
else:
list.append(range_end)
break
print(list)
代码按原样运行,但是它创建了一个列表,其中包含我不需要的第一个'A1A'和'A1B'值:
['A1A', 'A1B', 'A1C', 'A1D', 'A1E', 'A1F', 'A1G', 'A1H']
如何生成以“ A1C”开头的列表?
答案 0 :(得分:1)
稍后以两个字符开始“ for ascii_uppercase中的字母”
list = []
range = "A1C - A1H"
code = range[:2]
range_end = range[-3:]
count = 0
for letter in ascii_uppercase:
if count > 1:
order = code+letter
if order not in range_end:
list.append(order)
else:
list.append(range_end)
break
count += 1
print(list)
答案 1 :(得分:0)
您可以将内置的ord
和chr
函数与列表推导一起使用,以生成所需的列表:
l = ['A1' + chr(i) for i in range(ord('C'), ord('H') + 1)]
l
将变为:
['A1C', 'A1D', 'A1E', 'A1F', 'A1G', 'A1H']
答案 2 :(得分:0)
您可以比较字母代码并在大于字符串起始点时开始循环:
import string
def generate(string_data):
code = string_data[:2]
range_end = string_data[-3:]
sub_range = string_data[2:-6]
result=[]
for letter in string.ascii_uppercase:
if ord(letter)< ord(sub_range):
pass
elif code+letter == range_end:
result.append(code+letter)
break
else:
result.append(code+letter)
return result
输出:
['A1C', 'A1D', 'A1E', 'A1F', 'A1G', 'A1H']
替代解决方案: 这不是最佳解决方案,但您也可以从代码列表中切出列表:
list_data = []
range_data = "A1C - A1H"
code = range_data[:2]
range_end = range_data[-3:]
for letter in string.ascii_uppercase:
order = code+letter
if order not in range_end:
list_data.append(order)
else:
list_data.append(range_end)
break
print(list_data[list_data.index(range_data[:3]):list_data.index(range_end)+1])
注意:请勿使用list
和range
作为变量名,它们在Python中具有特殊含义。