gpt4 book ai didi

python - 消除列表中的重复元素

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

我在 Think Python 一书中尝试 chp 10.15 并编写了以下代码:

def turn_str_to_list(string):
res = []
for letter in string:
res.append(letter)
return res

def sort_and_unique (t):
t.sort()
for i in range (0, len(t)-2, 1):
for j in range (i+1, len(t)-1, 1):
if t[i]==t[j]:
del t[j]
return t

line=raw_input('>>>')
t=turn_str_to_list(line)
print t
print sort_and_unique(t)

我使用双“for”结构来消除排序列表中的任何重复元素。然而,当我运行它时,我总是得到错误的输出。如果我输入 'committee',输出是 ['c', 'e', 'i', 'm', 'o', 't', 't'],这是错误的,因为它仍然包含双 't '.我尝试了不同的输入,有时程序无法在列表中间拾取重复的字母,并且总是无法拾取末尾的字母。我错过了什么?谢谢大家。

最佳答案

您的程序没有删除所有重复字母的原因是因为在嵌套 for 循环中使用 del t[j] 导致程序跳过字母。

我添加了一些打印品来帮助说明这一点:

def sort_and_unique (t):
t.sort()
for i in range (0, len(t)-2, 1):
print "i: %d" % i
print t
for j in range (i+1, len(t)-1, 1):
print "\t%d %s len(t):%d" % (j, t[j], len(t))
if t[i]==t[j]:
print "\tdeleting %c" % t[j]
del t[j]
return t

输出:

>>>committee
['c', 'o', 'm', 'm', 'i', 't', 't', 'e', 'e']
i: 0
['c', 'e', 'e', 'i', 'm', 'm', 'o', 't', 't']
1 e len(t):9
2 e len(t):9
3 i len(t):9
4 m len(t):9
5 m len(t):9
6 o len(t):9
7 t len(t):9
i: 1
['c', 'e', 'e', 'i', 'm', 'm', 'o', 't', 't']
2 e len(t):9
deleting e
3 m len(t):8
4 m len(t):8
5 o len(t):8
6 t len(t):8
7 t len(t):8
i: 2
['c', 'e', 'i', 'm', 'm', 'o', 't', 't']
3 m len(t):8
4 m len(t):8
5 o len(t):8
6 t len(t):8
i: 3
['c', 'e', 'i', 'm', 'm', 'o', 't', 't']
4 m len(t):8
deleting m
5 t len(t):7
6 t len(t):7
i: 4
['c', 'e', 'i', 'm', 'o', 't', 't']
5 t len(t):7
i: 5
['c', 'e', 'i', 'm', 'o', 't', 't']
i: 6
['c', 'e', 'i', 'm', 'o', 't', 't']
['c', 'e', 'i', 'm', 'o', 't', 't']

每当调用 del t[j] 时,列表都会变小一个元素,但内部 j 变量的 for 循环会不断迭代。

例如:

i=1, j=2, t = ['c', 'e', 'e', 'i', 'm', 'm', 'o', 't', ' t']

它看到 t[1] == t[2](都是 'e')所以它删除了 t[2]。

现在 t = ['c', 'e', 'i', 'm', 'm', 'o', 't', 't']

但是,代码继续 i=1j=3,它将“e”与“m”进行比较并跳过“i”。

最后,它没有捕获最后两个 ',因为到 i=5 时,len(t) 是7,所以内层for循环的条件是range(6,6,1),不执行。

关于python - 消除列表中的重复元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24174852/

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