Python 3.x Python3-列表切片-查找给定元素并返回列表切片[elem-10:elem+;10])

Python 3.x Python3-列表切片-查找给定元素并返回列表切片[elem-10:elem+;10]),python-3.x,list,slice,Python 3.x,List,Slice,我正在处理字符串列表。 我想查找给定元素的列表,如果找到,我想返回列表的片段,该片段从找到的元素之前的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

我正在处理字符串列表。 我想查找给定元素的列表,如果找到,我想返回列表的片段,该片段从找到的元素之前的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']
试试这个:

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

您可以
枚举
列表并在其中循环,生成一个以符合您条件的每个元素为中心的切片:

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']]
def切片(顺序、半径、条件):
对于枚举中的i,x(顺序):
如果条件(x):
开始=i-半径
如果开始<0,则开始=0,否则开始
结束=i+半径+1
屈服顺序[开始:结束]
打印(列表(切片(str_list,2,lambda s:'5'in s)))
#[['str3','str4','str5','str6','str7']

您正在查找
'5'
'str5'
或任何包含
'5'
的字符串吗?您可以使用
index
来获取精确的字符串
str\u列表。index('str5')
或使用
next
来获取与某些条件匹配的第一个索引
next(i表示i,x表示枚举(str\u列表)中的x,如果x中的“5”
。如果列表中没有此类字符串,则返回
None
。我正在查找包含特定功能的所有元素。在本例中,所有包含5的元素。@Camilla由于答案对您有帮助,请也投票表决。