为了账号安全,请及时绑定邮箱和手机立即绑定

while 循环中的单个 remove 子句正在删除两个元素

while 循环中的单个 remove 子句正在删除两个元素

神不在的星期二 2021-08-11 17:35:24
我正在编写一个简单的秘密圣诞老人脚本,从列表中选择一个“GiftReceiver”和一个“GiftGiver”。生成两个列表和一个要填充的空数据框:import pandas as pdimport randomsantaslist_receivers = ['Rudolf',        'Blitzen',        'Prancer',        'Dasher',        'Vixen',        'Comet'        ]santaslist_givers = santaslist_receiversfinalDataFrame = pd.DataFrame(columns = ['GiftGiver','GiftReceiver'])然后我有一个 while 循环,它从每个列表中选择随机元素来选择礼物赠送者和接收者,然后从相应的列表中删除:while len(santaslist_receivers) > 0:    print (len(santaslist_receivers)) #Used for testing.    gift_receiver = random.choice(santaslist_receivers)    santaslist_receivers.remove(gift_receiver)    print (len(santaslist_receivers)) #Used for testing.    gift_giver = random.choice(santaslist_givers)    while gift_giver == gift_receiver:                      #While loop ensures that gift_giver != gift_receiver        gift_giver = random.choice(santaslist_givers)    santaslist_givers.remove(gift_giver)    dummyDF = pd.DataFrame({'GiftGiver':gift_giver,'GiftReceiver':gift_receiver}, index = [0])    finalDataFrame = finalDataFrame.append(dummyDF)最终的数据帧只包含三个元素而不是六个:print(finalDataframe)返回    GiftGiver GiftReceiver0    Dasher      Prancer0     Comet        Vixen0    Rudolf      Blitzen我在 while 循环中插入了两条打印行以进行调查。这些在删除元素之前和之后打印列表 santaslist_receivers 的长度。预期的回报是在第一次打印时看到原始列表长度,然后在第二次打印时看到减 1,然后在 while 循环的下一次迭代的第一次打印时再次看到相同的长度,然后依此类推。具体来说,我期望:6,5,5,4,4,3,3... and so on.返回的是6,5,4,3,2,1这与只有 3 行的 DataFrame 一致,但我看不出这是什么原因。我的代码或我的方法有什么错误?
查看完整描述

2 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

您应该在此处制作一份清单的明确副本

santaslist_givers = santaslist_receivers

本问题所述,有多种选择可以执行此操作。

在这种情况下,我会推荐(如果你有 Python >= 3.3):

santaslist_givers = santaslist_receivers.copy()

如果您使用的是旧版本的 Python,典型的做法是:

santaslist_givers = santaslist_receivers[:]


查看完整回答
反对 回复 2021-08-11
  • 2 回答
  • 0 关注
  • 217 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信