我正在写一个简单的秘密圣诞老人脚本,从列表中选择一个“礼物接收者”和一个“礼物接收者”。生成两个列表和一个要填充的空数据帧:
import pandas as pd
import random
santaslist_receivers = ['Rudolf',
'Blitzen',
'Prancer',
'Dasher',
'Vixen',
'Comet'
]
santaslist_givers = santaslist_receivers
finalDataFrame = 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 GiftReceiver
0 Dasher Prancer
0 Comet Vixen
0 Rudolf Blitzen
我在while循环中插入了两行打印行以进行调查。它们打印删除元素前后的列表长度。预期的结果是在第一次打印时看到原始列表长度,然后在第二次打印时看到-1,然后在while循环的下一次迭代的第一次打印时看到相同的长度,依此类推。具体来说,我希望:
6,5,5,4,4,3,3... and so on.
返回的是
6,5,4,3,2,1
这与只有3行的数据帧是一致的,但我看不出原因
我的代码或方法中有什么错误
你只要改变这条线就可以解决这个问题
至
Python变量本质上是指针,因此它们引用相同的列表,即
santaslist_givers
和santaslist_receivers
在实现中访问内存中的相同位置。要使它们不同,请使用list
函数更多信息,请参考^{}
你应该在这里把你的单子复印一份
如this question中所述,有多种方法可供选择
在这种情况下,我建议(如果您有Python>;=(第3.3节):
如果您使用的是较旧版本的Python,典型的方法是:
相关问题 更多 >
编程相关推荐