[英]How to deal with different size lists in python and indexes (List indexes)
我正在編寫一個python腳本,並對一些與列表相關的邏輯感到困惑。 我有2個列表獎項列表,其中包含獎賞元素,以及一個獲獎者列表,其中包含獲勝者元素。 對於winnerList中的每個元素,我想將一個獎賞元素與其關聯。
我有兩個方法:包含此邏輯的distributionPrizes和從distributionPrizes方法調用的sendEmail方法。
我遇到的問題是,當沒有足夠的獎金給每個獲勝者時,腳本會在第一次檢查后停止。
存在三個可能的條件:1.獲獎者數量足以獲獎。 在這種情況下,請調用emailWinners方法。 2.獎品少於獲獎者。 對於每個與獎品相匹配的獲獎者,請致電emailWinners。 3.沒有獎品。 在這種情況下,輸出錯誤。
我不確定如何為每個與獎項匹配的獲獎者調用emailWinners方法。 當prizeList和winnerList大小不同時,嘗試為每個獲獎者調用emailWinner時,出現索引錯誤。
例如(winnerList [] =長度5,priestList [] =長度3。應通過電子郵件向3名獲獎者發送獎品,但獲取索引超出范圍錯誤。)
到目前為止,這是我嘗試過的:
if len(prizeArray) < len(winnerEmail):
# Not enough prizes for every winner
print("Not enough prizes for " + prizeType) # Alert if not enough prizes
for email in winnerEmail:
emailUserWithPrize(winnerEmailAddress, winnerPrize)
winnerEmailAddress = ""
winnerPrize = ""
for i in range(len(winnerEmail)):
# For every prize thats available, assign one email to it
winnerEmailAddress = winnerEmail[i]
# Assign an email from the list to a prize from the list
if i < len(prizeArray):
winnerPrize = prizeArray[i]
prizeArray.remove(winnerPrize)
# Write array content to prize file, essentially removing used prizes
openFile.close() # Should delete all content
writeToFile = open(prizeFile, 'w')
writeToFile.write(prizeArray[i]) # Should write remaining prizes back to file
else:
print("No prize available for " + winnerEmail[i])
# print(winnerEmailAddress, " won ", winnerPrize)
# also need to remove this entry from prize file
emailUserWithPrize(winnerEmailAddress, winnerPrize)
您通常會使用zip
函數處理類似這樣的事情。 例如:
import re
import random
p = re.compile(r'^\w+@\w+\.\w+$')
prizes = ['blender', 'car', 'pencils', 'tablet']
emails = ['', 'sjadhgf', 'bob@bob.com', 'jack@bob.com',
'jenny@bob.com', 'frank@google.com', 'someone@gmail.com',
'other@other.com', 'runner@xxx.co']
valid_emails = [e for e in emails if p.match(e)]
random.shuffle(valid_emails)
for winner, prize in zip(valid_emails, prizes):
print(f'{prize} goes to {winner}')
這是預期的行為,因為檢查
if len(prizeList) > len(emailList):
檢查獎品列表是否大於電子郵件列表。 該if語句沒有else語句,因此當len(prizelist) <= len(emailList)
時,腳本停止
無論是誰撰寫的,都可能會應用此檢查,以便從那時起就可以做出“每個人都有足夠的獎品”的假設。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.