Список слайсов парных строк и целых чисел - PullRequest
1 голос
/ 02 мая 2019

Я хочу разместить список парных целочисленных и строковых элементов в соответствии с найденным в списке строковым элементом (String_list).

String_list = ['I','D','X']

CIG_list = [(65, '='), (1, 'X'), (91, '='), (3, 'D'), (60, '='), (1, 'X'), 
(7, '='), (2, 'S')]

Затем я хочу взять сумму целочисленных элементов, которые предшествуют этому элементу, и целое число этого элемента.

    for n in CIG_list:
        if n[1] in String_list:

            hope=CIG_list[0:(CIG_list.index(n)-1)]

            if len(hope) >= 2:
                hope = CIG_list[0:(CIG_list.index(n)-1)]
                hope4=sum([m[0] for m in hope])

            else:
                hope = CIG_list[0:(CIG_list.index(n))]
                hope4=sum([m[0] for m in hope])

Насколько я могу судить, эта стратегия не сработала, поскольку индекс списка не является уникальным (1, 'X'), встречается несколько раз.

В идеале я бы мог взять сумму целых чисел на подмножество и строку, связанную с местом среза.

Желаемый вывод:

[(65, '='), (1, 'X')] , 66 , X
[(65, '='), (1, 'X'), (91, '='), (3, 'D')] , 160 , D
[(65, '='), (1, 'X'), (91, '='), (3, 'D'), (60, '='), (1, 'X')] , 221 , X

1 Ответ

1 голос
/ 02 мая 2019

Вы можете попробовать вот так.

Примечание: Я только что использовал концепцию понимания списка и enumerate ().

String_list = ['I','D','X']

CIG_list = [(65, '='), (1, 'X'), (91, '='), (3, 'D'), (60, '='), (1, 'X'), (7, '='), (2, 'S')]

for index, tup in enumerate(CIG_list): 
    ch = CIG_list[index][1]
    if ch in String_list:
        slice_l = CIG_list[:index + 1]             # Used to slice from start to matching point
        total = sum([t[0] for t in slice_l])       # 66, 160, 221 etc.
        last_char = slice_l[-1][1]                 # X, D, X etc.
        print(slice_l, ",", total, ",", last_char) # Print slice_l, total, last_char

Выход:

[(65, '='), (1, 'X')] , 66 , X
[(65, '='), (1, 'X'), (91, '='), (3, 'D')] , 160 , D
[(65, '='), (1, 'X'), (91, '='), (3, 'D'), (60, '='), (1, 'X')] , 221 , X
...