如何生成以范围内第一个值开头的列表?

时间:2018-09-12 01:37:23

标签: python-3.x

我有一个指示值范围的字符串:"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”开头的列表?

3 个答案:

答案 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)

您可以将内置的ordchr函数与列表推导一起使用,以生成所需的列表:

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])

注意:请勿使用listrange作为变量名,它们在Python中具有特殊含义。