0

在 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 语句。

4

1 回答 1

1

你的问题在这里:

if code == i in portfolio_list:

这在 Python 中没有意义。in检查列表中是否包含给定值,因此检查是否i在中portfolio_list,然后检查是否code等于TrueFalse(无论i in portfolio_list返回什么。您想要的只是:

if code in portfolio_list:

请注意,如果portfolio_list可能很长,则将其设为一个集合可能是值得的,因为对于大量数据,检查集合中的成员身份要有效得多。

您的语法似乎是不同方法的混搭。你的意思可能是:

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

但是,由于这直接等效于code in portfolio_list,但更冗长且效率低下,因此不是一个好的解决方案。

于 2013-03-27T01:07:13.490 回答