0

Python 3には、さまざまなレコードを含むタプルのリストがあります。たとえば、と呼ばれalpha_dataます。それらは次のようにレイアウトされています:[('A'、'Apple'、14.5)、('B'、'Banana'、23.4)など]

ユーザーがタプルの最初の値(AまたはBなど)に類似した値を入力でき、プログラムがこの値が存在するかどうかを確認し、存在する場合はネストされた値全体を出力する方法はありますか?例:

Input: A

Output: A Apple 14.5

ユーザーが複数の値を入力してそれらすべてをチェックして印刷できるように変更する方法もありますか?例えば:

Input: A, B

Output:

    A Apple 14.5
    B Banana 23.4

編集:多分私はもう少し明確にする必要があります。入力を取得して複数のエントリのリストに変換するコードがあります。次に、タプルの3つの値を必要な方法で出力する行があります。これらの2つの部分を結合する方法が必要です。

これまでの私のコードは次のとおりです。

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 == portfolio_list[]:
            print('{:<6} {:<20} {:>8.2f}'.format(code, name, share_value))
    else:
            print("Failure")

ご覧のとおり、EXCHANGE_DATAというタプルのリストを含むsharesというモジュールを使用しています。これは、次のように設定されています。

 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),

では、ユーザー入力の値をチェックして、それらのいずれかを出力するにはどうすればよいですか?

4

1 に答える 1

4

いくつかの入力が与えられたレコードを取得するか、"A"非常"B"に簡単です。

alpha_data = [('A', 'Apple', 14.5), ('B', 'Banana', 23.4)]

user_input = "A"

[rec for rec in alpha_data if rec[0] == user_input]
Out[4]: [('A', 'Apple', 14.5)]

ただし、ユーザーがなどを使用"A"してこれらのエントリにアクセスできるようにすることが目標である場合は、より賢明な解決策のように思われます。"B"dict

alpha_dict = {"A": ("Apple", 14.5), "B": ("Banana", 23.4)}

user_input = "A"

alpha_dict[user_input]
Out[8]: ('Apple', 14.5)

portfolio_listこれらのアイデアを実際のユースケースに適用するのは非常に簡単です。データを繰り返し処理してキー内の一致を見つけようとしましたがportfolio_list、データ内で一致するものを繰り返し検索する方が簡単です。

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)]

portfolio_str=input("Please list portfolio: ")
portfolio_str= portfolio_str.replace(' ','')
portfolio_str= portfolio_str.upper()
portfolio_list= portfolio_str.split(',')

ユーザー入力を入力します。

Please list portfolio: AIA, ARG

コードの印刷:

print('{:<6} {:<20} {:>8}'.format('Code', 'Name', 'Price'))
Code   Name                    Price

for code in portfolio_list:
    # This assumes there will only be one record per code
    rec = [rec for rec in EXCHANGE_DATA if rec[0] == code][0]
    # The *rec part is using a neat python feature called
    # tuple unpacking, google it if you're not familiar with it
    print('{:<6} {:<20} {:>8.2f}'.format(*rec))

出力:

AIA    Auckair                  1.50
ARG    Argosy                  12.22
于 2013-03-26T21:56:25.637 に答える