0

たとえば、タプルのリストがあります。

[('ABC', 'Abcair', 1.50), ('DEF', 'Defir', 5.60), ('GHI', 'Ghiair',3.22), ('ANZ', 'Anzplace', 26.25), ('ARG', 'Argair', 12.22), ('CEN', 'Cenair', 11.22), ('CNU', 'Cununun',3.01)]

私はそのような入力コマンドを持っています

code_input = input('Please list portfolio: ').upper()

カンマで区切られた3文字のコードをいくつでも入力し、それを次のようにフォーマットします。

no_spaces_codes = code_input.replace(" ", "")
code_list = no_spaces_codes.split(",")

だから"Ank , ABc,DEF"['ANK', 'ABC', 'DEF']

次に、これらの見出しをフォーマットして印刷します

header="{0:<6}{1:<20}{2:>8}".format("Code","Place","Number")
print(header)

次に、タプルのリストで3文字のコードを検索し、同じ形式の見出しの下に値を印刷する必要があります。たとえば、リストにないコードは印刷されません。

Code  Name                   Price
ABC   Abcair                  5.30
DEF   Defair                 11.22

私はここまで到達しました。

for code in b:
    if code[0] == (code_list[1]):
        print(code[:])
        break

どのプリント

Code  Name                   Price
('CEN', 'Contact', 11.22)

しかし、私はこれ以上のことはできません。

4

2 に答える 2

3

あなたはそれを行うことができます:

place, price = next((c[1:] for c in b if c[0] == code_input), ('Not found', 0))

しかし、代わりに辞書を使用したい場合:

code_dict = {k: (v, p) for k, v, p in b}

その後、マッチングは単純なルックアップになります。

place, price = code_dict.get(code_input, ('Not found', 0))

デモンストレーション:

>>> b = [('ABC', 'Abcair', 1.50), ('DEF', 'Defir', 5.60), ('GHI', 'Ghiair',3.22), ('ANZ', 'Anzplace', 26.25), ('ARG', 'Argair', 12.22), ('CEN', 'Cenair', 11.22), ('CNU', 'Cununun',3.01)]
>>> code_input = 'CEN'
>>> place, price = next((c[1:] for c in b if c[0] == code_input), ('Not found', 0))
>>> print code_input, place, price
CEN Cenair 11.22
>>> code_dict = {k: (v, p) for k, v, p in b}
>>> place, price = code_dict.get(code_input, ('Not found', 0))
>>> print code_input, place, price
CEN Cenair 11.22

code_dictマッピングを使用すると、複数のルックアップを実行する場合、特にリストに存在しないエントリがある場合に、ルックアップがはるかに高速になります。これを残りのコードと組み合わせるには、次のようにします。

code_input = input('Please list portfolio: ').upper()
code_dict = {k: (v, p) for k, v, p in b}

line="{0:<6}{1:<20}{2:>8}"
print line.format("Code", "Place", "Number")

for code in code_input.split(','):
    code = code.strip()
    if code not in code_dict:
        continue  # skip codes not in the mapping
    place, price = code_dict[code]
    print line.format(code, place, price)

あなたの"Ank , ABc,DEF"入力のためにどれが印刷されますか:

Code  Place                 Number
ABC   Abcair                   1.5
DEF   Defir                    5.6
于 2013-03-19T10:36:05.563 に答える
1
result = [v for v in list_of_tuples if v[0] in code_list]
for v in result:
    print(v) # Or format 'v' tuple in any way you want.
于 2013-03-19T10:28:13.483 に答える