相关疑难解决方法(0)

在迭代它时修改Python字典

假设我们有一个Python字典d,我们就像这样迭代它:

for k,v in d.iteritems():
    del d[f(k)] # remove some item
    d[g(k)] = v # add a new item
Run Code Online (Sandbox Code Playgroud)

(f并且g只是一些黑盒转换.)

换句话说,我们尝试添加/删除项目,d同时使用迭代它iteritems.

这个定义得很好吗?你能提供一些参考来支持你的答案吗?

(如果它被破坏了,如何解决这个问题非常明显,所以这不是我追求的角度.)

python dictionary

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

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

我有这段代码:

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
查看次数

如果我想迭代添加的值,在迭代期间附加到列表是否安全?

我经常发现自己编写的代码如下:

mylist = [247]
while mylist:
    nextlist = []
    for element in mylist:
        print element
        if element%2==0:
            nextlist.append(element/2)
        elif element !=1:
            nextlist.append(3*element+1)
    mylist = nextlist
Run Code Online (Sandbox Code Playgroud)

好的 - 它通常不是这么简单[通常它确实是长列表,我只是选择了这个(参见xkcd)的乐趣],但我创建了一个列表,迭代它用这些元素做事情.在这样做的过程中,我将发现需要迭代的新事物,然后将它们放入一个新的列表中,然后迭代.

似乎可以写:

mylist=[247]
for element in mylist:
    print element
    if element%2 == 0:
        mylist.append(element/2)
    elif element !=1:
        mylist.append(element*3+1)
Run Code Online (Sandbox Code Playgroud)

我知道在迭代时修改列表被认为是危险的,但在这种情况下我想迭代新元素.

这样做会有危险吗?我唯一能想到的是列表可能会增长并占用大量内存(在我的许多情况下,我实际上希望最终得到整个列表).还有其他我无视的吗?

请注意:Python:迭代时将元素添加到列表是相关的,但是解释了创建列表副本的方法,以便我们可以避免迭代原始列表.我问的是我的具体情况是否有任何错误,我实际上希望扩展我的迭代.


编辑:这里更接近真正的问题.假设我们想要生成网络的"k-core".也就是说,删除程度小于k的所有节点.从剩余网络中删除程度小于k的所有节点.重复,直到没有人删除.该算法将首先找到少于k个节点,将它们放在to_delete列表中.然后,当删除节点时,如果邻居的度数变为k-1,则将其添加到列表中.这可以通过以下方式完成:

delete_list = [node for node in G.nodes() if G.degree(node)<k]
for node in delete_list:
    nbrs = G.neighbors(node)
    for nbr in nbrs:
        if G.degree(nbr)==k:
            delete_list.append(nbr)
    G.remove_node(node)
Run Code Online (Sandbox Code Playgroud)

python loops

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

标签 统计

python ×3

loops ×2

dictionary ×1

list ×1