Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:修改For循环中的列表_Python - Fatal编程技术网

Python:修改For循环中的列表

Python:修改For循环中的列表,python,Python,我正在尝试创建纸牌游戏模拟,以稍微提高我的编程技能,但我遇到了以下问题: 我有一个大列表中的卡片,我使用下一个函数来选择一张卡片并将其从牌组中移除 cards= [........(big list of cards here in string format).......] def Pickacard(x): rand=random.randint(0,len(x)-1) t=int(x[rand]) del(x[rand]) return t 当我使用下面

我正在尝试创建纸牌游戏模拟,以稍微提高我的编程技能,但我遇到了以下问题:

我有一个大列表中的卡片,我使用下一个函数来选择一张卡片并将其从牌组中移除

cards= [........(big list of cards here in string format).......]
def Pickacard(x):
    rand=random.randint(0,len(x)-1)
    t=int(x[rand])
    del(x[rand])
    return t
当我使用下面的迭代时,甲板没有更新。取而代之的是,每次拾取一张牌时,牌组都会短1项,尽管在每个循环中,我都设置了“test=cards”,以便将列表设置回原来的状态

for i in range(200):
    test=cards
    Pickacard(test)
    print(test)

卡片组有208张卡片,如果卡片组被更新,那么(打印测试)会给我一张207张卡片的列表。相反,我得到了一张8张卡片的清单。我想只有当…测试=卡片…时才会发生这种情况。。。。在循环之外。

您复制的是引用,而不是列表数据。尝试以下选项

import copy
test = copy.copy(cards) 


另外,请阅读您正在复制的是引用,而不是列表数据。尝试以下选项

import copy
test = copy.copy(cards) 


另外,在调用
test=cards
时,请阅读您没有在
test
中复制列表
cards
。实际上,您所做的只是将指针
test
复制到
卡中。因此,它们指向同一个列表。这就是为什么名单不断缩小,而且从未更新

如果你想续借,有几种可能性。您可以创建具有以下内容的列表副本:

  • test=cards[:]
    (这不是最好的方法)
  • 使用
    list()
    test=list(复制)
  • 显式复制:
    test=copy.copy(卡片)
    (必须先导入模块
    copy
否则,您可以保存删除的卡,并在循环结束时重新插入。这样可以避免在每次迭代时复制列表。虽然这在您的情况下并不重要,但最好通过避免不必要的计算来考虑性能:

def Pickacard(x):
    rand=random.randint(0,len(x)-1)
    card = x[rand]
    del(x[rand])
    return card

for i in range(200):
    card = Pickacard(cards)
    print(cards)
    cards.append(card)

调用
test=cards
时,您没有在
test
中复制列表
cards
。实际上,您所做的只是将指针
test
复制到
卡中。因此,它们指向同一个列表。这就是为什么名单不断缩小,而且从未更新

如果你想续借,有几种可能性。您可以创建具有以下内容的列表副本:

  • test=cards[:]
    (这不是最好的方法)
  • 使用
    list()
    test=list(复制)
  • 显式复制:
    test=copy.copy(卡片)
    (必须先导入模块
    copy
否则,您可以保存删除的卡,并在循环结束时重新插入。这样可以避免在每次迭代时复制列表。虽然这在您的情况下并不重要,但最好通过避免不必要的计算来考虑性能:

def Pickacard(x):
    rand=random.randint(0,len(x)-1)
    card = x[rand]
    del(x[rand])
    return card

for i in range(200):
    card = Pickacard(cards)
    print(cards)
    cards.append(card)

在Python中,变量只是对象的别名。因此,在您的程序中,
test
cards
是同一对象的两个别名。因此,当您删除
中的项目时,
测试
也会发生变化

如果希望
test
成为另一个对象,可以使用

test = cards[:]
这将建立一个包含所有卡片项的新列表

您可以在此处查看有关如何复制列表的更多信息
在Python中,变量只是对象的别名。因此,在您的程序中,
test
cards
是同一对象的两个别名。因此,当您删除
中的项目时,
测试
也会发生变化

如果希望
test
成为另一个对象,可以使用

test = cards[:]
这将建立一个包含所有卡片项的新列表

您可以在此处查看有关如何复制列表的更多信息

尝试复制列表。e、 g.
测试=列表(卡片)
。您当前正在做的是传递对同一列表的引用。当你从中删除时。在引用该列表的所有实例中都可以看到更改。请尝试复制该列表。e、 g.
测试=列表(卡片)
。您当前正在做的是传递对同一列表的引用。当你从中删除时。在引用该列表的所有实例中都可以看到更改。