IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 7-4 删除列表中的重复值(高教社,《Python编程基础及应用》习题4-8) (5 分) -> 正文阅读

[Python知识库]7-4 删除列表中的重复值(高教社,《Python编程基础及应用》习题4-8) (5 分)

题目的详细描述如下:

输入一个列表,删除其中的重复值,再输出。

要求

假设列表中存在k个值为a的元素,删除前k-1个元素,保留最后一个。 不同元素在列表中的相对位置不应被改变。

输入格式:

[元素1, 元素2, ... , 元素n]

输出格式:

[元素1,元素2, ... , 元素k]

输入样例:

[4,3,2,3,2,4,True]

输出样例:

[3, 2, 4, True]

提示:将形如"[1,3,5]"的字符串转换成列表可以使用eval()函数。
注意:不要在遍历列表的同时对列表进行增删改操作,这样会引起混乱,导致不正确的结果!

注意,输出格式应与输出样例一致,涉及空格,逗号等。

请接着往下看:你的程序真的对了吗?

多数读者的解题思路是制造一个v列表的复制品以避免在遍历v的同时删除v中的元素。该解决方案可以通过本题设置的全部测试。但这并不意味着该解决方案是“完全正确”的。请尝试下述输入:

[1,7,6,7,7,True,'a',9.8,'a',True]


很遗憾,程序将产生错误的输出:

[6, 7, 9.8, 'a', True]

产生这种意外结果的原因是:在Python里1和True是相等的! 0和False也是相等的! 在使用列表的count()函数,index()函数,remove()函数时,1和True, 0和False被不加区分地对待。

下述代码的执行结果证实了这一点:

v = [1,True,2,True,0,False]
print("count of 1:", v.count(1), ",count of True:", v.count(True))
print("count of 0:", v.count(0), ",count of False:", v.count(False))
print("index of True:",v.index(True), ",index of False",v.index(False))
v.remove(True)
print("after v.remove(True):",v)

其执行结果为:

count of 1: 3 ,count of True: 3     #1,True都同时为1或True
count of 0: 2 ,count of False: 2    #0,False都同时为0或False
index of True: 0 ,index of False 4  #下标0的1被视为True
after v.remove(True): [True, 2, True, 0, False]   #1被当作True移除了


这个问题的完美解决方案,请参考拟出版的《Python编程 实验》一书。
该书是高等教育出版社《Python编程基础及应用》教材的配套实验指导书。

这个问题的根本原因在于bool数据类型在Python3中被定义为int类的子类。

一个基本思路是:虽然1和True的值相等,但是数据类型不同,可以用type()函数来区别。这里给出一个可行的办法。代码如下:

x = eval(input())
for i in range(len(x)):
    if x[i] == True and type(x[i]) == bool:
        x[i] = str(x[i])
y = x.copy()
for i in y:
    if x.count(i) != 1:
        x.remove(i)
for i in range(len(x)):
    if x[i] == 'True':
        x[i] = eval(x[i])
print(x)

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-01-25 10:32:27  更:2022-01-25 10:34:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:52:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码