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]