2017-09-17 16 views
0

私はPythonを初めて使い、リストに問題があります。 つまり、私は車と生産年の2つのリストを記入するようにユーザーに求めています。次に、両方のリストを1つに追加します。Python:リストを追加して要素にアクセスする

enter code here 
carYear = [] 
carYear.append(cars) 
carYear.append(year) 

私は2つの質問があります: a)はこれらのリストを印刷するエレガントな方法があるので、要素車と年が元のために(互いに近接記載されています:ポルシェ、1998)? b)carYearリストから最初のリスト(車)にアクセスして印刷することはできますか?

答えて

2

あなたはそうのように一緒に二つのリストを圧縮することができます

cars = ["car1", "car2", "car3"] 
years = ["2012", "2015", "2017"] 
for c, y in zip(cars, years): 
    print("{0}, {1}".format(c, y)) 

あなたがCとyを印刷することができ、各反復について。車の名前と年です。

+0

ありがとうございます! – Ewa

+0

@エワあなたは大歓迎です。 50分をお持ちの場合は、Raymond Hettinger(core python dev)の講演をご覧ください:https://www.youtube.com/watch?v=OSGv2VnC0go&t=799s彼は21:50にizipについて語ります。 Izipはzipのほうがいいです(itertoolsをインポートする必要があります。そのため、Ididは私の答えでそれについて話しません)。 –

0

listオブジェクトの代わりにdictを使用するようにデータ構造を変更することをお勧めします。ディクショナリ(dict)は、マップまたは連想配列と呼ばれることがあります。それらを使用すると、データにキー値を関連付けることでデータにアクセスできます。次の例では、carsの要素がキーとして機能することを前提としています。

zipを使用してリストから辞書を作成し、与えられたシーケンスをタプルに変換することができます。

>>> cars = ['civic', 'corvette', 'prius'] 
>>> years = ['2009', '1979', '2017'] 
>>> zip(cars, years) 
[('civic', '2009'), ('corvette', '1979'), ('prius', '2017')] 

listtupleのSは、各タプルのdict第一及び第二の要素を初期化するために使用することができ、それぞれのキーと値です。

>>> carYear = dict(zip(cars, years)) 
>>> carYear 
{'corvette': '1979', 'prius': '2017', 'civic': '2009'} 

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

>>> carYear['corvette'] 
'1979' 

dictオブジェクトの内容を印刷するために、私は再びタプルに離れて物事を壊し.items()方法を使用するようにしたいです。観察:

for car, year in sorted(carYear.items()): 
    print('Car: {} => {}'.format(car, year)) 

私は出力が一貫していることを確認するためにsortedを使用しています。 dictオブジェクトの実装のため、.items()は、実行するたびにランダムな順序でデータを返します。 sortedはこの問題を解決し、一貫した出力が得られます。 Pythonの辞書の詳細については

がここにPythonのドキュメントを参照してください。 https://docs.python.org/3/tutorial/datastructures.html#dictionaries

0

をあなたはnamedtuple(それはdictよりも高速でなければなりません)例えば試すことができます。

from collections import namedtuple 


cars = [] 
Car = namedtuple('Car', ['type', 'year']) 
cars.append(Car('Porsche', '1998')) 

for car in cars: 
    print('{0}, {1}'.format(car.type, car.year)) 

をしかし注意して、namedtuplesは不変です。あなたはできませんcar.type = 'BMW'

関連する問題