gpt4 book ai didi

python - 将列表转换为集合和联合操作

转载 作者:太空宇宙 更新时间:2023-11-03 15:05:39 25 4
gpt4 key购买 nike

def count1(x,s):
def loop(x,s,count):
while s!=[]:
if x == s[0]:
return loop(x,s[1:],count + 1)
else:
return loop(x,s[1:],count)
if s==[]:
return count
return loop(x,s,0)

def remove_all1(x,s):
def loop(x,s,ss):
while s!=[]:
if x == s[0]:
return loop(x,s[2:],ss+[s[1]])
else:
return loop(x,s[1:],ss+[s[0]])
return ss
return loop(x,s,[])

def union0(xs,ys):
ss = xs + ys
for i in ss:
#print(i)
if count1(i,ss) > 1:
return [ss[i]] + remove_all1(i,ss)
return ss

print(union0([1,7,5,6],[9,9,0,6,4]))

这将打印 [0, 1, 7, 5, 9, 9, 0, 4],如何打印 [0,1,7,5,9,0,4]?为了避免冗余,我知道 set() 方法,但只想知道使用 count0() 和 remove_all1() 方法。谢谢

最佳答案

你可以set.union在映射到集合之后:

def union(*lsts):
return list(set.union(*map(set, lsts)))

输出:

In [2]: union([1, 7, 5, 6], [9, 9, 0, 6, 4], [1, 2])
Out[2]: [0, 1, 2, 4, 5, 6, 7, 9]

或者如果您想要它们首次出现的顺序:

from collections import OrderedDict
from itertools import chain
def union(*lsts):
return list(OrderedDict.fromkeys(chain(*lsts)))

或者为了维持秩序,您也可以边做边创建集合:

from itertools import chain
def union(*lsts):
st = set()
for ele in chain(*lsts):
if ele not in st:
yield ele
st.add(ele)

使用 Counter dict 来获取列表中所有元素的并集是完全没有意义的,如果你试图保留出现 < n 次的元素,那么它是有意义的。

关于python - 将列表转换为集合和联合操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33066592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com