亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 237 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號