相关疑难解决方法(0)

从列表中删除项目时出现奇怪的结果

我有这段代码:

numbers = range(1, 50)

for i in numbers:
    if i < 20:
        numbers.remove(i)

print(numbers)
Run Code Online (Sandbox Code Playgroud)

但我得到的结果是:

[2,4,6,8,10,12,14,16,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35 ,36,37,38,39,40,41,42,43,44,45,46,47,48,49]

当然我希望结果中没有出现20以下的数字,我假设我在删除时做错了.

python loops list

32
推荐指数
3
解决办法
5844
查看次数

从列表中删除元素的最佳方法

我想知道从列表中删除元素的最佳方法/有效方法是什么.

一些功能被Python提供:

  1. some_list.remove(value),但如果找不到值则抛出错误.
  2. some_list.pop(some_list[index]),删除列表中给定位置的项目,并将其返回.
  3. del (some_list[index]),它从给定索引中删除元素,它与pop不同,因为它不返回值.

场景:

  • 如果要删除的项目很少,请说一个元素或1到5之间.
  • 如果必须删除序列中的多个项目.
  • 如果必须根据条件删除不同的项目.
  • 如果你有一个列表列表并想要按顺序删除元素怎么样?

python list

11
推荐指数
4
解决办法
1万
查看次数

Python性能:从列表中删除项目

我有一个列表,其长度为:370000.在这个列表中,我有以下项目:"a", "y", "Y", "q", "Q", "p", "P",,这意味着这是一个单词列表,但我不时会得到那些单个字符.

我想从列表中删除这些字符,我在python中很新,但我想到的第一件事就是做类似的事情:

for word in words:
    if word== 'm' or  word== 'y' or word== 'Y' or word== 'p' or word== 'Q' or word== 'q' or word== 'a' or word== 'uh':
        words.remove(word)
Run Code Online (Sandbox Code Playgroud)

在一个包含370.000项目的列表中,这种方法正在耗费时间.说真的,很多.

有没有人对如何获得更好的表现有另一个很棒的想法?

提前致谢.

python performance list

7
推荐指数
1
解决办法
384
查看次数

从Python中的列表中删除奇数索引元素

我试图从我的列表中删除奇数索引元素(其中零被认为是偶数)但是以这种方式删除它们将无法工作,因为它会抛出索引值.

lst = ['712490959', '2', '623726061', '2', '552157404', '2', '1285252944', '2', '1130181076', '2', '552157404', '3', '545600725', '0']


def remove_odd_elements(lst):
    i=0
    for element in lst:
        if i % 2 == 0:
            pass
        else:
            lst.remove(element)
        i = i + 1
Run Code Online (Sandbox Code Playgroud)

如何迭代我的列表并干净地删除那些奇数索引的元素?

python list elements

6
推荐指数
1
解决办法
1万
查看次数

如何删除Python列表中所有出现的相同元素?

如何333从下面的列表中删除两个出现的?

>>> a = [-1, 1, 66.25, 333, 333, 1234.5]
Run Code Online (Sandbox Code Playgroud)

我在Python 2.7命令行中输入了以下脚本

for num in a:
    if num == 333:
       a.remove(num)
Run Code Online (Sandbox Code Playgroud)

但只333删除了第一次出现的情况

 >>> a
 [-1, 1, 66.25, 333, 1234.5]
Run Code Online (Sandbox Code Playgroud)

如何删除所有相同元素的出现?我希望能够指定我希望删除所有实例的元素,并使用相同的名称或其他名称获取新的列表

python list

4
推荐指数
3
解决办法
2万
查看次数

如何从列表中删除包含在另一个列表中的项目中找到的单词的项目

我想从列表'a'中删除项目,其中列表'b'包含在列表'a'中找到的单词的项目

a = ['one two three', 'four five six', 'seven eight nine']
b = ['two', 'five six']
Run Code Online (Sandbox Code Playgroud)

结果应该是:

a = ['seven eight nine']
Run Code Online (Sandbox Code Playgroud)

这是因为在'a'列表中的项目中可以找到单词"two"和"five six".

这就是我试图解决它的方法:

for i in a:
    for x in b:
        if x in i:
            a.remove(i)
Run Code Online (Sandbox Code Playgroud)

返回:

print a
['four five six', 'seven eight nine']
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用,我该如何解决这个问题呢?

谢谢.

python list

4
推荐指数
2
解决办法
5256
查看次数

从字符串中删除元音

我试图在标题中尽可能清楚,但很难简单地解释它.我必须从某个字符串中删除所有元音; 为此,我创建了一个循环,遍历由该字符串的字符组成的列表,删除元音然后加入它们:

def anti_vowel(text):
    vow = ["a", "e", "i", "o", "u"]
    chars = []

    for i in text:
        chars.append(i)

    for i in chars:
        if i.lower() in vow:
            chars.remove(i)

    return "".join(chars)
Run Code Online (Sandbox Code Playgroud)

问题是,当我运行代码时,总会有一个不会被删除的元音.例子:

>>> anti_vowel("Hey look Words!")
Hy lk Words!

>>> anti_vowel("Frustration is real")
Frstrton s ral
Run Code Online (Sandbox Code Playgroud)

我不是Python的专家,但这很令人困惑.为什么它会删除一些字母并保留其他字母,即使它们完全相同?

python python-2.7

4
推荐指数
2
解决办法
1万
查看次数

for 循环列表忽略第二个元素?

我有一个非常奇怪的错误,我看不出哪里出错了。我想遍历对象列表

objects =  [<object 1>, <object 2>, <object 3>, <object 4>, <Query_Category 5>, <object 6>] 
Run Code Online (Sandbox Code Playgroud)

我做了一个简单的

for i, object in enumerate(objects):
    print "delete ", object
    objects.pop(i)
Run Code Online (Sandbox Code Playgroud)

输出是

delete  <Query_Category 1>
delete  <Query_Category 3>
delete  <Query_Category 4>
delete  <Query_Category 5>
delete  <Query_Category 6>
Run Code Online (Sandbox Code Playgroud)

所以循环忽略了第二个元素?这个结果是可重复的,这意味着如果我再次运行它会导致相同的结果???这对您来说可能无法重现,因为我猜这是由我的代码中的一些奇怪的东西引起的???但我不知道要寻找什么?我在这里缺少总和基本的python原则吗?谢谢卡尔

python

4
推荐指数
1
解决办法
109
查看次数

在 python 中动态更改迭代器是否安全?

使用 python,我需要在迭代列表时动态添加列表中的成员:

i = [1,2,3,4,5]

for a in i:
    if a == 1:
        i.append(100)
    print a
Run Code Online (Sandbox Code Playgroud)

能保证正常工作吗?

python iteration

3
推荐指数
1
解决办法
1651
查看次数

ElementTree:Element.remove()跳跃迭代

我有这个xml输入文件:

<?xml version="1.0"?>
<zero>
  <First>
    <second>
      <third-num>1</third-num>
      <third-def>object001</third-def>
      <third-len>458</third-len>
    </second>
    <second>
      <third-num>2</third-num>
      <third-def>object002</third-def>
      <third-len>426</third-len>
    </second>
    <second>
      <third-num>3</third-num>
      <third-def>object003</third-def>
      <third-len>998</third-len>
    </second>
  </First>
</zero>
Run Code Online (Sandbox Code Playgroud)

我的目标是删除任何<third-def>不是值的第二级.为此,我写了这段代码:

try:
    import xml.etree.cElementTree as ET
except ImportError:
    import xml.etree.ElementTree as ET
inputfile='inputfile.xml'
tree = ET.parse(inputfile)
root = tree.getroot()

elem = tree.find('First')
for elem2 in tree.iter(tag='second'):
    if elem2.find('third-def').text == 'object001':
        pass
    else:
        elem.remove(elem2)
        #elem2.clear()
Run Code Online (Sandbox Code Playgroud)

我的问题是elem.remove(elem2).它会跳过其他所有第二级.以下是此代码的输出:

<?xml version="1.0" ?>
<zero>
  <First>
    <second>
      <third-num>1</third-num>
      <third-def>object001</third-def>
      <third-len>458</third-len>
    </second>
    <second>
      <third-num>3</third-num>
      <third-def>object003</third-def>
      <third-len>998</third-len>
    </second>
  </First>
</zero>
Run Code Online (Sandbox Code Playgroud)

现在,如果我取消注释该elem2.clear() …

python iteration elementtree xml-parsing

3
推荐指数
1
解决办法
1426
查看次数