如何解决如果两个字符串以一定顺序出现,则从列表中获取元素
假设我有以下列表列表
lst=[['AAAB'],['ACAC'],['CABA'],['AACC'],['BACB'],['BCAA'],['CBAA'],['ABBC']]
我需要提取出现A
并随后出现C
的列表,而不考虑它们之间可能存在的其他字母。
因此,结果必须类似于
res=[['ACAC'],['ABBC']]
我可以在每个列表内的另一个for循环内实现一个for循环,然后遍历每个字符串,看看是否出现A
和C
,但是我对如何保持幻影顺序,即A
出现在C
解决方法
lst=[['AAAB'],['ACAC'],['CABA'],['AACC'],['BACB'],['BCAA'],['CBAA'],['ABBC']]
out = [[i] for (i,) in lst if 'A' in i and 'C' in i and i.index('A') < i.index('C')]
print(out)
打印:
[['ACAC'],['ABBC']]
或使用re
:
import re
r = re.compile(r'A.*C')
lst=[['AAAB'],) in lst if r.search(i)]
print(out)
@OlvinRoght的解决方案:
lst=[['AAAB'],['ABBC']]
res = [i for i in lst if len(i[0]) > i[0].find('C') - i[0].find('A') > 0]
print(res)
,
扩展@andrej正则表达式解决方案
import re
r = list(filter(lambda x: [i for i in x if re.findall('A.*C',i)],l))
非正则表达式解决方案
def find_patt(lis):
res =[]
for sublis in lis:
tmp =[]
for ele in sublis:
if ('A' in ele) and ('C' in ele):
if ele.index('A')<len(ele)-ele[::-1].index('C'):
tmp.append(ele)
if tmp!=[]:
res.append(tmp)
tmp =[]
return res
lst=[['AAAB'],['ABBC'],['CAC']]
print(find_patt(lst))
# [['ACAC'],['CAC']]
,
请尝试以下操作:(已编辑,以说明不包含字符“ A”或“ C”的列表)
lst=[['AAAB'],['ABBC']]
res = []
for lst_inner in lst:
if ('A' in lst_inner[0] and 'C' in lst_inner[0] and
lst_inner[0].find('A') < lst_inner[0].find('C')):
res.append(lst_inner)
print(res)
,
print("Hello world")
inputList=[['AAAB'],['ABBC']]
print(inputList)
matchingCharactersInOrderList = ["A","C"]
filteredList=[]
for subList in inputList:
tempStringToMatchOrder=""
tempStringToMatchOrder = tempStringToMatchOrder.join(subList)
if matchingCharactersInOrderList[0] in tempStringToMatchOrder:
partitionedString = tempStringToMatchOrder.partition(matchingCharactersInOrderList[0])[2]
if matchingCharactersInOrderList[1] in partitionedString:
filteredList.append(subList)
#matching = [s for s in lst if ("A" in s)]
print(filteredList)
,
尝试
lst =[['AAAB'],['ABBC']]
res = []
def check(list_string):
index1=0
index2=0
for letters in list_string:
if letters == 'A':
index1 = list_string.index(letters)
break
for letters in list_string:
if letters =='C':
index2 = list_string.index(letters)
break
if index1 < index2:
return True
elif index1 > index2:
return False
else:
return False
for x in lst:
string = x[0]
string_splitted = list(string)
if check(string_splitted):
res.append(x)
print(res)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。