python将字符串分组到列表中

2024-04-26 23:24:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个具有相同len的列表。在

list1=[0, 1, 1, 1, 0, 0, 0, 1]
list2=['ATT', 'TTC', 'TCC', 'CCC', 'CCA', 'CAA', 'AAA', 'AAG']

注:

(一)。每个列表中的元素数不同,但这两个列表始终具有相同的len。在

(二)。list1只包含整数0,或{}。它只能包含0s,只能包含1s,或者同时包含0s和{}。在

3)中。list2只包含长度相同的字符串,而且对于每个字符串kk是一个索引>0),list2[k][:-1]=list2[k-1][1:],这意味着如果k=2, list[k]='TCC', list[k][:-1]='TC', list[k-1]='TTC', list[k-1][1:]='TC'。因此,list2[k][:-1]=list2[k-1][1:]。在

我想根据list1中的对应元素对list2中的字符串进行分组(对应的:在list1和{}中共享相同的index中的元素)。如果list1[n]==1,那么list2[n-1]+list2[n][-1]。如果list1[n]==0, and list1[n+1]==0, do nothing。在

例如,list2中第一个整数1的对应字符串是'TTC',然后'ATT',而{}变成{}。列表2中第二个整数1的对应字符串是'TCC',然后'ATTC'(注意,已经合并了),而{}变成{}。然后list1[3]==1'ATTCC'和{}变成{}。list1[7]==1,那么'AAG' ('AAG'=list2[7])需要与其前一个字符串'AAA'分组,这两个变成{}。您什么都不做的唯一条件是n=0,和{}。这就是为什么,list1[4]==0,和{},'CCA'保持不变。list1[5]==0,而{},则{}保持不变。在

改造后, 这是我想要的输出。 newlist2=['ATTCCC', 'CCA', 'CAA', 'AAAG']

显然,代码不正确。在

^{pr2}$

Tags: 字符串元素列表len整数attlistttc
2条回答

这是你想要的吗?公司名称:

list1=[0, 1, 1, 1, 0, 0, 0, 1]
list2=['ATT', 'TTC', 'TCC', 'CCC', 'CCA', 'CAA', 'AAA', 'AAG']

indices = []
for i in range(1, len(list1)):
    if list1[i]==1:
        list2[i] = list2[i-1]+list2[i][-1]
        indices.append(i-1)


list2 = [list2[i] for i in range(len(list2)) if i not in indices]
print(list2)

输出:

^{pr2}$

我循环查看您的列表,应用您的方法,并在末尾跟踪需要删除的索引,然后创建一个没有不必要索引的新列表。在

您可以将itertools.groupbyfunctools.reduce一起使用:

import itertools
import functools
list1=[0, 1, 1, 1, 0, 0, 0, 1]
list2=['ATT', 'TTC', 'TCC', 'CCC', 'CCA', 'CAA', 'AAA', 'AAG']
d = [[a, [h for _, h in b]] for a, b in itertools.groupby(zip(list1, list2), key=lambda x:x[0])]
final_results = [i for b in filter(None, [[functools.reduce(lambda x, y:x+y[-1], [d[i-1][-1][-1]]+d[i][-1])] if d[i][0] else d[i][-1][:-1] for i in range(len(d))]) for i in b]

输出:

^{pr2}$

相关问题 更多 >