python – 消除列表中的重复元素
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 消除列表中的重复元素,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2125字,纯文字阅读大概需要4分钟。
内容图文
我在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’结构来消除排序列表中的任何重复元素.
但是,当我运行它时,我一直得到错误的输出.
如果我输入“委员会”,输出是[‘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 = 1,j = 3,它将’e’与’m’进行比较并跳过’i’.
最后,它没有捕获最后两个’t’,因为在时间i = 5时,len(t)是7,因此内部for循环的条件是范围(6,6,1)并且不执行.
内容总结
以上是互联网集市为您收集整理的python – 消除列表中的重复元素全部内容,希望文章能够帮你解决python – 消除列表中的重复元素所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。