Хотя, вероятно, не так эффективно, как словарем на основе подходов, это получает работу сделали слишком:
data = "link1|2-3,6-9,12-13|4-5,10-11,14-16"
link_name, boundary_1, boundary_2 = data.split("|")
boundary_1 = [(b, "A") for b in boundary_1.split(",")]
boundary_2 = [(b, "B") for b in boundary_2.split(",")]
temp = boundary_1 + boundary_2
# We sort the temp list based on the starting point
temp = sorted(temp, key=lambda x: int(x[0].split("-")[0]))
position = []
value = []
for pair, letter in temp:
start, stop = pair.split("-")
# We loop through all the intermittent values that are not in the input
for val in range(int(start), int(stop)+1):
position.append(val)
value.append(letter)
print "position:\t{}".format("\t".join([str(x) for x in position]))
print "value: \t{}".format("\t".join([x for x in value]))
Этот ген erates выход, как вы просили (с разделением вкладок):
position: 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
value: A A B B A A A A B B A A B B B
btw, длина границ варьируется - например, 2-78, 100-125 и т. Д. Приведенные выше данные выборки предназначены только для целей презентации. надеюсь это поможет. – user3267156
Я думаю, вам нужно продемонстрировать попытку решить проблему, прежде чем кто-то потратит время на то, чтобы помочь вам – ninesided