相关疑难解决方法(0)

迭代时如何从列表中删除项目?

我正在迭代Python中的元组列表,并且如果它们符合某些条件,我会尝试删除它们.

for tup in somelist:
    if determine(tup):
         code_to_remove_tup
Run Code Online (Sandbox Code Playgroud)

我应该用什么代替code_to_remove_tup?我无法弄清楚如何以这种方式删除项目.

python iteration

917
推荐指数
16
解决办法
45万
查看次数

生成器表达式与列表理解

什么时候应该使用生成器表达式?什么时候应该在Python中使用列表推导?

# Generator expression
(x*2 for x in range(256))

# List comprehension
[x*2 for x in range(256)]
Run Code Online (Sandbox Code Playgroud)

python list-comprehension generator

390
推荐指数
7
解决办法
13万
查看次数

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

在迭代它时从Python中删除字典中的项是否合法?

例如:

for k, v in mydict.iteritems():
   if k == val:
     del mydict[k]
Run Code Online (Sandbox Code Playgroud)

我们的想法是从字典中删除不符合某个条件的元素,而不是创建一个新字典,该字典是被迭代的字典的子集.

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

python scripting dictionary

268
推荐指数
7
解决办法
16万
查看次数

如何检查列表的所有元素是否与条件匹配?

我有一个包含20000个列表的列表.我使用每个列表的第3个元素作为标志.我希望在此列表上执行一些操作,只要至少有一个元素的标志为0,它就像:

my_list = [["a", "b", 0], ["c", "d", 0], ["e", "f", 0], .....]
Run Code Online (Sandbox Code Playgroud)

在开始时,所有标志都是0.我使用while循环来检查至少一个元素的标志是否为0:

def check(list_):
    for item in list_:
        if item[2] == 0:
            return True
    return False
Run Code Online (Sandbox Code Playgroud)

如果check(my_list)返回True,那么我继续处理我的列表:

while check(my_list):
    for item in my_list:
        if condition:
            item[2] = 1
        else:
            do_sth()
Run Code Online (Sandbox Code Playgroud)

实际上,当我迭代它时,我想删除my_list中的一个元素,但是当我迭代它时,我不允许删除项目.

原始的my_list没有标志:

my_list = [["a", "b"], ["c", "d"], ["e", "f"], .....]
Run Code Online (Sandbox Code Playgroud)

因为我迭代它时无法删除元素,所以我发明了这些标志.但是它my_list包含很多项,并且while循环在每个for循环中读取所有项,并且它会消耗大量时间!你有什么建议吗?

python for-loop list while-loop

188
推荐指数
3
解决办法
26万
查看次数

使用列表推导仅仅是副作用是Pythonic吗?

想想我正在调用它的副作用的函数,而不是返回值(比如打印到屏幕,更新GUI,打印到文件等).

def fun_with_side_effects(x):
    ...side effects...
    return y
Run Code Online (Sandbox Code Playgroud)

现在,是Pythonic使用列表推导来调用这个函数:

[fun_with_side_effects(x) for x in y if (...conditions...)]
Run Code Online (Sandbox Code Playgroud)

请注意,我不会将列表保存在任何位置

或者我应该像这样调用这个函数:

for x in y:
    if (...conditions...):
        fun_with_side_effects(x)
Run Code Online (Sandbox Code Playgroud)

哪个更好?为什么?

python list-comprehension

97
推荐指数
4
解决办法
8534
查看次数

循环"忘记"删除一些项目

在这段代码中,我试图创建一个函数anti_vowel,它将从字符串中删除所有元音(aeiouAEIOU).我认为它应该可以正常工作,但是当我运行它时,示例文本"嘿看单词!" 以"Hy lk Words!"返回.它"忘记"删除最后一个'o'.怎么会这样?

text = "Hey look Words!"

def anti_vowel(text):

    textlist = list(text)

    for char in textlist:
        if char.lower() in 'aeiou':
            textlist.remove(char)

    return "".join(textlist)

print anti_vowel(text)
Run Code Online (Sandbox Code Playgroud)

python string list

77
推荐指数
6
解决办法
7039
查看次数

从列表中弹出随机元素的最pythonic方法是什么?

假设我有一个x未知长度的列表,我想从中随机弹出一个元素,以便列表之后不包含该元素.什么是最pythonic的方式来做到这一点?

我可以用一个相当不方便combincation做到这一点pop,random.randint以及len和希望看到更短的或更好的解决方案:

import random
x = [1,2,3,4,5,6]
x.pop(random.randint(0,len(x)-1))
Run Code Online (Sandbox Code Playgroud)

编辑:我想要实现的是从列表中连续弹出随机元素.(即,随机弹出一个元素并将其移动到字典中,随机弹出另一个元素并将其移动到另一个字典,...)


请注意,我使用的是Python 2.6,并且没有通过搜索功能找到任何解决方案.

python random list

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

如何从循环中的python列表中删除项?

可能重复:
在Python中迭代时从列表中删除项目

我正在尝试从python中的列表中删除一个项目:

x = ["ok", "jj", "uy", "poooo", "fren"]
for item in x:
    if len(item) != 2:
        print "length of %s is: %s" %(item, len(item))
        x.remove(item)
Run Code Online (Sandbox Code Playgroud)

但它不会删除"fren"项目.有任何想法吗?

python list

58
推荐指数
3
解决办法
15万
查看次数

迭代时修改列表

l  = range(100)                         
for i in l:                         
    print i,                         
    print l.pop(0),                  
    print l.pop(0)
Run Code Online (Sandbox Code Playgroud)

上面的python代码给出了与预期完全不同的输出.我想循环遍历项目,以便我可以在循环时跳过项目.

请解释.

python iterator loops list

54
推荐指数
5
解决办法
8万
查看次数

Python:迭代时将元素添加到列表中

我知道在迭代列表时不允许删除元素,但允许在迭代时将元素添加到python列表中.这是一个例子:

    for a in myarr:
      if somecond(a):
          myarr.append(newObj())
Run Code Online (Sandbox Code Playgroud)

我在我的代码中尝试了这个并且似乎工作正常,但是我不知道是不是因为我很幸运并且它将来会在某个时候破坏?

编辑:我不喜欢复制列表,因为"myarr"很大,因此它太慢了.另外,我需要用"somecond()"检查附加的对象.

编辑:在某些时候"somecond(a)"将是假的,因此不会有无限循环.

编辑:有人问过"somecond()"函数.myarr中的每个对象都有一个大小,每次"somecond(a)"为真,并且一个新对象被附加到列表中,新对象的大小将小于a."somecond()"有一个关于小物体如何的epsilon,如果它们太小,它将返回"false"

python iteration

51
推荐指数
5
解决办法
9万
查看次数