在python中具有一个类似项的列表列表中合并列表
我有一个列表,其中包含字符串:在python中具有一个类似项的列表列表中合并列表,python,string,list,Python,String,List,我有一个列表,其中包含字符串: list = [["a","b"],["c","d"],["a", "e"],["f","d"],["x","y"]] 现在,我想合并所有列表,其中包含1个类似项,如下所示: grouped_list = [["a", "b", "e"],["c","d","f"],["x","y"]] 我的代码如下: list = [["a","b"],["b","c"],["d","e"],["x","y"]] clist = list.copy() result
list = [["a","b"],["c","d"],["a", "e"],["f","d"],["x","y"]]
现在,我想合并所有列表,其中包含1个类似项,如下所示:
grouped_list = [["a", "b", "e"],["c","d","f"],["x","y"]]
我的代码如下:
list = [["a","b"],["b","c"],["d","e"],["x","y"]]
clist = list.copy()
result = []
counter = 0
del_list = []
def oneofsame(L1, L2):
counter = 0
for i in L1:
for j in L2:
if i == j:
counter += 1
if counter == 0:
return False
else:
return True
for l in list:
try:
del clist[clist.index(l)]
except:
pass
result.append([])
for i in l:
for cl in clist:
if oneofsame(l, cl):
for j in l:
if j not in result[counter]:
result[counter].append(j)
for j in cl:
if j not in result[counter]:
result[counter].append(j)
del_list.append(cl)
else:
result.append(cl)
del_list.append(cl)
for j in del_list:
del clist[clist.index(j)]
del_list = []
counter += 1
del_list = []
cresult = result.copy()
for i in range(len(cresult)-1, 0, -1):
if cresult[i] == []:
del result[i]
print(result)
但是这段代码没有合并我所有的示例输入(我不能粘贴示例输入,因为它的敏感数据)这里有一种方法 每对:
- 如果我们找到一个包含其中一个值的组,我们会将该对附加到该组中
- 如果我们发现第二个组包含另一个值,我们将合并这些组
- 如果我们没有找到匹配的组,那么我们的对就构成了一个新的组
我希望下面的代码能够解决您的问题:
import itertools
import copy
lista = [["a","b"],["c","d"],["a", "e"],["f","d"],["x","y"]] #[["a","b"],["e","d1"],["a", "e"],["a","d"],["d","y"]]
def grouped_list(lista):
aa = []
bbc = copy.deepcopy(lista)
flag = False
for a, b in itertools.combinations(lista,2):
bb = a+b
if len(set(bb)) < len(bb):
flag = True
cc = list(set(bb))
cc.sort()
if cc not in aa: aa.append(cc)
if a in lista: lista.remove(a)
if b in lista: lista.remove(b)
if lista: aa = aa + lista
if not flag: return bbc
else: return grouped_list(aa)
print ("Grouped list -->", grouped_list(lista))
导入itertools
导入副本
清单a=[“a”、“b”]、[“c”、“d”]、[“a”、“e”]、[“f”、“d”]、[“x”、“y”]#[“a”、“b”]、[“e”、“d1”]、[“a”、“e”]、[“a”、“d”]、[“d”、“y”]
def分组列表(列表A):
aa=[]
bbc=copy.deepcopy(lista)
flag=False
对于itertools.组合中的a、b(列表a、2):
bb=a+b
如果len(set(bb))”,分组列表(lista))
请随意询问/建议上述代码中的任何内容。您的分组“规则”是什么还不清楚。你能进一步解释吗?解释分组的标准,再给出至少一个输入/输出示例,并表明你已经研究了自己的问题。分组规则似乎是合并任何具有共同元素的列表(a和d是示例中导致分组的共同元素,a在第一和第三个列表中,d在第二和第四个列表中)。。分组是一组合并的列表。对此我有一个答案,我理解OP的要求。@b-fg您可以投票重新打开更复杂的数据集,如[1],您需要删除“for lst in tests:”并直接在名为“tests”的列表上运行函数,否则它会给您类似的结果[2]。[1] &[2]最后一个循环在3种不同的情况下运行函数,以验证每个测试情况的输出是否正确。这就是为什么不同的案例被分组在一个名为
tests
的列表中。当然,您需要直接对数据调用函数。
import itertools
import copy
lista = [["a","b"],["c","d"],["a", "e"],["f","d"],["x","y"]] #[["a","b"],["e","d1"],["a", "e"],["a","d"],["d","y"]]
def grouped_list(lista):
aa = []
bbc = copy.deepcopy(lista)
flag = False
for a, b in itertools.combinations(lista,2):
bb = a+b
if len(set(bb)) < len(bb):
flag = True
cc = list(set(bb))
cc.sort()
if cc not in aa: aa.append(cc)
if a in lista: lista.remove(a)
if b in lista: lista.remove(b)
if lista: aa = aa + lista
if not flag: return bbc
else: return grouped_list(aa)
print ("Grouped list -->", grouped_list(lista))