2016-11-18 99 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

使用'dict'而不是'list'這裏似乎更適合。 – hyades

回答

2

所以你要追加到historyentryList的條目,但只有第一個給定日期?

我認爲這是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

@丹D.你是一位聖人。 –

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代碼,只是將對象替換爲簡單的整數。我只是把它輸入口譯員,這就是結果。 –