簡體   English   中英

比較列表項和元組

[英]Comparing list items and tuples

在Python 3中,我試圖創建一個程序,該程序將用戶輸入的3位數字代碼轉換為列表中的項目。 然后,將這些項目與元組列表中元組的第一部分(3位代碼)進行比較,並打印整個元組。

import shares
portfolio_str=input("Please list portfolio: ")
portfolio_str= portfolio_str.replace(' ','')
portfolio_str= portfolio_str.upper()
portfolio_list= portfolio_str.split(',')
print(portfolio_list)
print()
print('{:<6} {:<20} {:>8}'.format('Code', 'Name', 'Price'))
data=shares.EXCHANGE_DATA
for  (code, name, share_value) in data:
      if code == i in portfolio_list:
        print('{:<6} {:<20} {:>8.2f}'.format(code, name, share_value))
else:
        print("Failure")

如您所見,我正在使用一個名為share的模塊,其中包含一個名為EXCHANGE_DATA的元組列表,其格式如下:

EXCHANGE_DATA = [('AIA', 'Auckair', 1.50),
         ('AIR', 'Airnz', 5.60),
         ('AMP', 'Amp',3.22), 
         ('ANZ', 'Anzbankgrp', 26.25),
         ('ARG', 'Argosy', 12.22),
         ('CEN', 'Contact', 11.22),
         ('CNU', 'Chorus',3.01),
         ('DIL', 'Diligent', 5.3),
         ('DNZ', 'Dnz Property', 2.33),
         ('EBO', 'Ebos', 1.1),

示例性輸入為: AIA, AMP, ANZ

相應的輸出為:

Code         Name         Price
AIA          Auckair      1.50
AMP          Amp          3.22
ANZ          Anzbankgrp   26.25

我只是停留在我認為需要的for和/或if語句上。

您的問題是這里:

if code == i in portfolio_list:

這在Python中沒有意義。 in檢查列表中是否包含給定值,因此這將檢查i是否在portfolio_list ,然后檢查code是否等於TrueFalse (無論i in portfolio_list返回的Portfolio_list中的內容是什么。您想要的就是:

if code in portfolio_list:

請注意,如果portfolio_list可能很長,則可能值得將其設置為集合,因為對於大量數據而言,檢查集合中的成員資格顯着提高了效率。

您的語法似乎是不同方法的混搭。 您可能意味着:

if any(code == i for i in portfolio_list):

但是,由於這直接等效於code in portfolio_list ,但是更加冗長且效率低下,所以它不是一個好的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM