Условная подстрока элементов в списке (Python) - PullRequest
2 голосов
/ 10 марта 2020

У меня есть 2 списка. Первый - это мой список данных, а второй - список случайно сгенерированных чисел:

alist = ['ABCDEF', 'GHIJKL', 'MNOPQR', 'STUVWX']
blist = [2,0,3,1]

Я хочу вставить 3 символа из каждого элемента в alist на основе значений из blist .

Мой желаемый результат:

['CDE', 'GHI', 'PQR', 'TUV']

Как можно вывести X символов из одного списка на основе начальных местоположений мотивов, описанных в другом списке?

Редактировать:

Следующая функция выполняет мой желаемый результат, но есть ли лучший способ выполнить sh эту задачу?

x = -1
clist = []
for i in alist:
    tracker = 1
    x = x + tracker
    substring = i[blist[x]:blist[x]+3]
    clist.append(substring)

Ответы [ 3 ]

1 голос
/ 10 марта 2020

Вы можете определить функцию для этого и использовать встроенный enumerate().


alist = ['ABCDEF', 'GHIJKL', 'MNOPQR', 'STUVWX']
blist = [2, 0, 3, 1]


def substring_picker(list_a, list_b):
    # first create an empty list
    results = []

    # then loop over alist
    for i, element in enumerate(alist):
        # only pick elements with at least 3 chars
        if len(alist[i]) >= 3:
            # append the found chars to results list
            results.append(list_a[i][list_b[i]:list_b[i] + 3])

    return results


result = substring_picker(alist, blist)
print(result)

1 голос
/ 10 марта 2020

Вот решение:

output = []
for x in range(len(alist)):
    index = blist[x]
    output.append(alist[x][index:index+3])

Как работает эта программа:

Сначала она проходит через l oop для длины alist. Индексная позиция, которую вы хотите проанализировать, является значением x блиста. Наконец, добавьте в список вывода первые три символа из позиции индекса в alist.

0 голосов
/ 11 марта 2020

Понимание короткого списка с использованием zip для связи каждого «счетчика» с сокращаемым элементом, затем операторы индекса для выбора и сокращения строк:

 [x[0][x[1]:][:3] for x in zip(alist, blist)]
...