【问题标题】:Comparing list items and tuples比较列表项和元组
【发布时间】:2013-03-27 00:52:20
【问题描述】:

在 Python 3 中,我正在尝试创建一个程序,该程序将用户输入作为 3 位代码并将它们转换为列表中的项目。然后它将这些项目与元组列表中元组的第一个(3 位代码)部分进行比较,并打印 whole 元组。

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

【问题讨论】:

  • 看起来你使用了错误的数据结构 - 你想要一个字典。
  • @Lattyware 我想使用字典,但我被困在使用元组列表中(这是一个使用给定数据等的固定问题)....
  • data_dict = {code: (name, price) for code, name, price in EXCHANGE_DATA} - 很容易用dict comprehension 转换它,然后它会简化其他代码。

标签: python list python-3.x tuples


【解决方案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,但更冗长且效率低下,因此不是一个好的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 2012-11-25
    相关资源
    最近更新 更多