Python 不使用集合从嵌套列表中删除重复项
我有一个列表,我想删除每个嵌套列表中的重复项Python 不使用集合从嵌套列表中删除重复项,python,python-3.x,string,list,Python,Python 3.x,String,List,我有一个列表,我想删除每个嵌套列表中的重复项 输入:['c','p','p'],['a','a','a'],['t','t','p'] 输出:['c','p',['a',['t','p']] 这里的关键是我不能使用set()函数或fromkeys()。 这是我的密码 ans=[] 就我而言,写信: [ans.append([x])用于i中的x,如果x不在ans中] 返回 ['c']、['p']、['p']、['a']、['a']、['a']、['t']、['t']、['p']] 这不是我
输入:['c','p','p'],['a','a','a'],['t','t','p']
输出:['c','p',['a',['t','p']]
这里的关键是我不能使用set()函数或fromkeys()。
这是我的密码
ans=[]
就我而言,写信:
[ans.append([x])用于i中的x,如果x不在ans中]
返回
['c']、['p']、['p']、['a']、['a']、['a']、['t']、['t']、['p']]
这不是我想要的。您可以遍历内部列表,检查该字符是否已经存在
inputList = [['c', 'p', 'p'], ['a', 'a', 'a'], ['t', 't', 'p']]
result = []
for l in inputList:
# create a empty list to store intermediate result
tmp = []
# iterate over sublist
for ch in l:
if ch not in tmp: tmp.append(ch)
result.append(tmp)
print(result)
由于您不能使用
set()
或fromkeys()
,因此我建议进行常规循环迭代,每次检查值是否已经存在:
lst = [['c', 'p', 'p'], ['a', 'a', 'a'], ['t', 't', 'p']]
new_lst = []
for x in lst:
res = []
for y in x:
if y not in res:
res.append(y)
new_lst.append(res)
print(new_lst)
理想情况下,new\u lst
这里应该有一个集合。list=['c','p','p'],['a','a'],['t','t','p']]
list=[['c', 'p', 'p'], ['a', 'a', 'a'], ['t', 't', 'p']]
ans=[]
for sublist in list:
temp=[]
for ch in sublist:
if ch not in temp:
temp.append(ch)
ans.append(temp)
print(ans)
ans=[]
对于列表中的子列表:
温度=[]
对于ch in子列表:
如果通道不在温度范围内:
临时附加(ch)
ans.append(临时)
打印(ans)
#我认为它应该可以工作,非常简单,可能更复杂,只要忽略每个字母的实例,直到它是最后一个
- 对于输入的每个子列表:
[[…]对于输入中的子列表]
- 如果字母不在子列表的其余部分,则存储该字母:
[ltr for i,ltr in enumerate(sub)if ltr not in sub[i+1:]
input = [['c', 'p', 'p'], ['a', 'a', 'a'], ['t', 't', 'p']]
output = [[ltr for i, ltr in enumerate(sub) if ltr not in sub[i+1:]] for sub in input]
print(output) #[['c', 'p'], ['a'], ['t', 'p']]
你被嵌套的列表绊倒了。第二个循环是过滤元素所必需的。虽然效率很低,但您可以将您的尝试写为
ans = []
for i in letters:
k = []
for j in i:
if j not in k:
k.append(j)
ans.append(k)
您可能会缩短此代码,但不会降低其复杂性
为此,可以使用排序的和itertools.groupby
。这仍然不如哈希表有效,但比线性查找更好(尽管它可能对短数组没有多大影响):
“我不能使用set()函数或fromkeys()。”为什么不能?
ans = [[k for k, _ in groupby(sorted(i))] for i in letters]