Я имею дело со списком строк. Я хочу найти список для данного элемента, и если он найден, я хочу вернуть фрагмент списка, который идет от n индексов до n индексов после найденного элемента.

str_list = ['str1','str2','str3','str4','str5','str6','str7','str8']
for i in str_list:
    for elem in str_list:
        if '5' in elem:
            print(elem in range(str_list[i-2:i+3]))

#expected output
['str3','str4','str5','str6','str7']
1
Camilla 23 Окт 2018 в 18:55

2 ответа

Лучший ответ

Попробуй это:

str_list = ['str1','str2','str3','str4','str5','str6','str7','str8']

for c,i in enumerate(str_list):
    if '5' in i:
        new = str_list[c-2:c+3]

In [1068]: new
Out[1068]: ['str3', 'str4', 'str5', 'str6', 'str7']
1
Mayank Porwal 23 Ноя 2018 в 07:16

Вы можете enumerate просмотреть список и просмотреть его, получив срез, сосредоточенный на каждом элементе, который соответствует вашему условию:

def slices(sequence, radius, condition):
    for i, x in enumerate(sequence):
        if condition(x):
            begin = i - radius
            begin = 0 if begin < 0 else begin
            end = i+radius+1
            yield sequence[begin:end]

print(list(slices(str_list, 2, lambda s: '5' in s)))
# [['str3', 'str4', 'str5', 'str6', 'str7']]
0
Patrick Haugh 23 Окт 2018 в 16:15
52953280