GVKun编程网logo

Python-从列表中删除项-在迭代过程中-这个习惯用法有什么问题?(python从列表中删除一个元素)

11

本文将带您了解关于Python-从列表中删除项-在迭代过程中-这个习惯用法有什么问题?的新内容,同时我们还将为您解释python从列表中删除一个元素的相关知识,另外,我们还将为您提供关于33-pyth

本文将带您了解关于Python-从列表中删除项-在迭代过程中-这个习惯用法有什么问题?的新内容,同时我们还将为您解释python从列表中删除一个元素的相关知识,另外,我们还将为您提供关于33-python基础-python3-从列表中删除元素、OOP Python-从列表中删除类实例、Ptython-在迭代字典时如何从字典中删除项目?、Python - 从列表中删除引号的实用信息。

本文目录一览:

Python-从列表中删除项-在迭代过程中-这个习惯用法有什么问题?(python从列表中删除一个元素)

Python-从列表中删除项-在迭代过程中-这个习惯用法有什么问题?(python从列表中删除一个元素)

作为实验,我这样做:

letters=[''a'',''b'',''c'',''d'',''e'',''f'',''g'',''h'',''i'',''j'',''k'',''l'']for i in letters:    letters.remove(i)print letters

最后打印显示不是所有项目都被删除了吗?(其他所有人)。

IDLE 2.6.2      >>> ================================ RESTART ================================>>> [''b'', ''d'', ''f'', ''h'', ''j'', ''l'']>>> 

这有什么解释?如何将其重写以删除所有项目?

答案1

小编典典

这是什么原因呢?

因为Python语言被设计为以不同方式处理此用例。该文档明确指出:

在循环中修改要迭代的序列是不安全的(这仅适用于可变序列类型,例如列表)。如果你需要修改要遍历的列表(例如,复制选定的项目),则必须遍历一个副本。

强调我的。有关更多信息,请参见链接的页面-文档受版权保护,并保留所有权利。

你可以很容易地理解为什么得到了你想要的东西,但是基本上这是未定义的行为,可以很容易地更改,而不会因构建而异。只是不要这样做。

这就像想知道为什么i += i++ + ++i在针对你的语言的特定编译器版本中,该行在你的体系结构上所做的事情到底是怎么回事 -包括但不限于破坏计算机并让恶魔从你的鼻子里飞出来 :)

如何将其重写以删除所有项目?
- del letters[:](如果你需要更改对此对象的所有引用)
- letters[:] = [] (如果你需要更改对此对象的所有引用)
- letters = [] (如果你只想使用一个新对象)
也许你只是想根据条件删除一些物品?在这种情况下,你应该遍历列表的副本。制作副本的最简单方法是使用如下[:]语法制作包含整个列表的切片:

#remove unsafe commandscommands = ["ls", "cd", "rm -rf /"]for cmd in commands[:]:  if "rm " in cmd:    commands.remove(cmd)

如果你的检查不是特别复杂,则可以(可能应该)过滤:

commands = [cmd for cmd in commands if not is_malicious(cmd)]

33-python基础-python3-从列表中删除元素

33-python基础-python3-从列表中删除元素

1-remove()方法

  • 根据值删除元素. 
  • remove()方法传入一个列表中的值,它将从被调用的列表中删除。

分享图片

  • 如果该值在列表中出现多次,只有第一次出现的值会被删除。
  • 如果要删除的值可能在列表中出现多次,就需要使用循环来判断是否删除了所有这样的值

分享图片

  • 试图删除列表中不存在的值,将导致 ValueError 错误

分享图片

 

2-del语句

  • del 语句将根据元素索引删除列表中的值,表中被删除值后面的所有值,都将向前移动一个下标

分享图片

  • del 的常见错误

分享图片

 

如果不确定该使用del 语句还是pop() 方法,

下面是一个简单的判断标准:

  • 如果你要从列表中删除一个元素,且不再以任何方式使用它,就使用del 语句;

  • 如果你要在删除元素后还能继续使用它,就使用方法pop() 。

 

3-pop()方法

术语弹出 (pop)源自这样的类比:列表就像一个,而删除列表末尾的元素相当于弹出栈顶元素。 
  • 方法pop() 可删除列表末尾的元素,并能够接着使用它。

分享图片

  • 弹出列表中任何位置处的的元素
  • 只需在括号中指定要删除的元素的索引即可。

分享图片

OOP Python-从列表中删除类实例

OOP Python-从列表中删除类实例

我有一个列表,其中保存了由特定类创建的对象。

我想知道,因为我无法解决此问题,如何从列表中删除该类的实例?

这应该基于了解对象的一个​​属性而发生。

Ptython-在迭代字典时如何从字典中删除项目?

Ptython-在迭代字典时如何从字典中删除项目?

如何解决Ptython-在迭代字典时如何从字典中删除项目??

此答案不适用于python3,并且会给出RuntimeError

RuntimeError:字典在迭代过程中更改了大小。

发生这种情况是因为mydict.keys()返回的是迭代器而不是列表。正如评论中指出的那样,只需将其转换mydict.keys()为列表即可list(mydict.keys()),它应该可以工作。

控制台中的一个简单测试显示,在迭代字典时你无法修改字典:

>>> mydict = {''one'': 1, ''two'': 2, ''three'': 3, ''four'': 4}
>>> for k, v in mydict.iteritems():
...    if k == ''two'':
...        del mydict[k]
...
------------------------------------------------------------
Traceback (most recent call last):
  File "<ipython console>", line 1, in <module>
RuntimeError: dictionary changed size during iteration

如delnan的回答所述,当迭代器尝试移至下一个条目时,删除条目会导致问题。而是使用keys()方法获取键列表并进行处理:

>>> for k in mydict.keys():
...    if k == ''two'':
...        del mydict[k]
...
>>> mydict
{''four'': 4, ''three'': 3, ''one'': 1}

如果需要根据项目值删除,请使用items()方法:

>>> for k, v in mydict.items():
...     if v == 3:
...         del mydict[k]
...
>>> mydict
{''four'': 4, ''one'': 1}

解决方法

在Python上进行迭代时从字典中删除项目是否合法?

例如:

for k,v in mydict.iteritems():
   if k == val:
     del mydict[k]

这个想法是从字典中删除不满足特定条件的元素,而不是创建一个新字典,该字典是正在迭代的字典的子集。

这是一个好的解决方案吗?有没有更优雅/更有效的方法?

Python - 从列表中删除引号

Python - 从列表中删除引号

如何解决Python - 从列表中删除引号?

我有一个包含数字列表的数据框。打印列表时,我想删除前面和末尾的引号。 我无法用替换功能替换它们。

a = df.iloc[0][''ids'']
b = [a]
b (Output) 
[''2769734487041924,7608779650164612''] <-- one quotation mark at beginning and end

我想要的(手动创建):

row_ids = [1234,4567]
row_ids (Output)
[1234,4567] <-- That''s the format I want to get the list to,without the quotation marks

brow_ids 数据类型都返回为“列表”,因此必须有一种方法可以让列表不带引号。

解决方法

我认为 a 是一个字符串,因此要从中获取 b 作为您需要的整数列表

b = list(map(int,a.split(",")))
,

解析字符串并拆分,然后使用十进制将其转换为int。

lst = [''2769734487041924,7608779650164612'']
lst2 = []

for i in "".join(lst).split(","):
    lst2.append(int(i,base=10))
print(lst2)

关于Python-从列表中删除项-在迭代过程中-这个习惯用法有什么问题?python从列表中删除一个元素的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于33-python基础-python3-从列表中删除元素、OOP Python-从列表中删除类实例、Ptython-在迭代字典时如何从字典中删除项目?、Python - 从列表中删除引号的相关知识,请在本站寻找。

本文标签: