2016-11-18 7 views
0

私は、エントリの配列をループし、その日付がまだ日付リストにない場合、日付を持つ新しい曜日オブジェクトを追加するpythonスクリプトを作成しようとしています。配列を繰り返しながら追加する

entryList = [aDate,anotherDate,fooDate] 
history = [aDate] 

for entry in entryList: 
    for day in history[:]: 
    if day.date == entry.date: 
     break 
    else: 
     dayEntry = dayEntry() 
     dayEntry.date = entry.date 
     history.insert(0,dayEntry) 
     break 

これに従って:https://docs.python.org/3/tutorial/controlflow.htmlそれはうまくいくはずですが、私は何かが不足しています。

thanks--

+0

'list'はこちらより適しているようだ' dict'の代わりに使用。 – hyades

答えて

2

だから、entryListhistoryエントリを追加したいが、指定した日付のための唯一の最初の1?

これはnot any()のケースだと思います。

for entry in entryList: 
    if not any(day.date == entry.date for day in history): 
     dayEntry = dayEntry() 
     dayEntry.date = entry.date 
     history.insert(0,dayEntry) 

not any(day.date == entry.date for day in history)

として読み取ります。このエントリの日付と歴史の中で一日がありません。

履歴はキーがエントリ日付ある辞書、のではなく、リストすることが許可されている場合:

for entry in entryList: 
    if entry.date not in history: 
     dayEntry = dayEntry() 
     dayEntry.date = entry.date 
     history[dayEntry.date] = dayEntry 

別のオプションは二つのリストと一緒にセットを使用することです。

私はあなたのコードのように動作するはずだと思う
dates = set() 
for entry in history: 
    dates.add(entry.date) 

for entry in entryList: 
    if entry.date not in dates: 
     dayEntry = dayEntry() 
     dayEntry.date = entry.date 
     history.insert(0,dayEntry) 
     dates.add(entry.date) 
+0

@ 40Hzおそらく、元のコードで無限ループに陥っていた可能性があります。リストの先頭に挿入すると、反復処理が繰り返されるため、同じ要素が次の繰り返しになるからです。 – Gilly

+0

@Dan D.あなたはSAINTです。 –

0

は次のとおりです。

>>> entrylist = [1, 2, 3, 4] 
>>> history = [1,] 
>>> for e in entrylist: 
...  for d in history[:]: 
...   if d == e: 
...    break; 
...   else: 
...    history.insert(0, e) 
...    break; 
... 
>>> entrylist 
[1, 2, 3, 4] 
>>> history 
[4, 3, 2, 1] 
+0

OPには、重複していることについて何も言及していませんでした。私のコードは単純な整数で置き換えられたオブジェクトのOPコードです。私はそれを通訳に入力しました。これが結果です。 –

関連する問題