比较列表项和元组

时间:2013-03-27 00:52:20

标签: python list python-3.x 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")

正如您所看到的,我正在使用一个名为shares的模块,其中包含一个名为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语句。

1 个答案:

答案 0 :(得分: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,但更加冗长和低效,这不是一个好的解决方案。