我想编写一个从列表中删除偶数的函数(例如xs = [1,2,3,4,5,6]),然后返回剩余的列表。需要帮助。谢谢 注意:我不能使用任何内置函数,如删除排序等,但只能使用删除语句。从Python 3中的列表中删除值
回答
,因为你需要归还剩余列表中,你应该不会删除,而是过滤:
[v for v in xs if v % 2 == 1]
这将创建所有奇数号码的清单:
>>> xs = [1, 2, 3, 4, 5, 6]
>>> [v for v in xs if v % 2 == 1]
[1, 3, 5]
最显而易见的方法没有按” t工作:
for index, value in enumerate(xs):
if not value % 2:
del xs[index]
或者,更糟糕的是,它发生在这种特殊情况下,但只是因为你得到了非常幸运的(你的老师甚至可能会指望你陷入这个陷阱)。
为什么?那么,当你del i[0]
,这转移一切下来。所以当你下次检查i[1]
时,那不是原来的i[1]
,而是原来的i[2]
。你永远不会检查,因此永远不能删除,原来i[1]
!
这是在文档中的一个很大的灰色音符为for
解释。*
这个最好的解决办法是,为的Martijn Pieters的说,不摆在首位删除。
如果你不关心变异原始列表(如果没有其他对象有对同一列表的引用,并且你的老师不喜欢技巧问题,你不关心),只需创建并返回一个新的清单,如他的回答。即使你做需要改变原来的列表,xs[:] = [v for v in xs if v % 2 == 1]
将做到这一点,就像删除就地。
但是如果你必须就地删除由于某种原因(这听起来像力量是你的任务的要求),最简单的方法是从末尾向后工作:
for index, value in list(enumerate(xs))[::-1]:
if not value % 2:
del xs[index]
由于从列表中删除一个值只会将其后的值向下移动,以相反的顺序通过列表意味着我们永远不会迷路并跳过我们想要测试的元素。
*该解释类似于Python 1.x中的内容;现在的迭代器协议是公开的,他们并不真正需要谈一谈保持内部计数器在某个不确定的地方...
xs=[1,2,3,4,5,6]
not_even = []
for i in xs:
if i%2 != 0:
not_even.append(i)
print not_even
#output: [1, 3, 5]
您也可以使用列表理解它:
[i for i in xs if i%2 != 0]
这只是Martijn Pieters的答案的一个更加冗长的版本,没有解释。 – abarnert
- 1. 从Python列表中删除nan值
- 2. 从列表中删除值从列表中删除
- 3. 从列表中删除值
- 4. 从列表中删除值
- 5. 从列表中删除值
- 6. Python 3删除空列表
- 7. Python - 从列表中删除空列表
- 8. Python:从列表中删除列表?
- 9. 删除python列表中的多个值
- 10. KeyError:0; Python从列表中删除列
- 11. 从python的列表中删除'
- 12. 删除Python中的列表
- 13. 从Python列表中删除每个值的某个值?
- 14. Python:从两个值之间的列表中删除所有值
- 15. 从列表中删除一定的值
- 16. 无法从列表中删除NoneTypes(python)
- 17. 从Python列表中删除BeautifulSoup标记
- 18. Python从列表中删除项目
- 19. Python - 从列表中删除单词
- 20. Python - 从列表中删除项目
- 21. 从列表中删除整数+ python
- 22. 从列表中删除文件名python
- 23. 从python列表中删除'u'
- 24. 从python列表中删除坐标
- 25. 从python列表中删除元素
- 26. 从Python列表中删除重复项
- 27. 排序和从列表中删除Python
- 28. 从Python列表中删除重复项
- 29. python-从列表中删除元素
- 30. 从python列表中删除单词?
还有呢?你试过什么了?你卡在哪里? –
那么,因为没有'delete'语句,我猜你会失败的任务。 – abarnert