在迭代i时追加到数组

2024-09-30 06:14:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个python脚本,该脚本循环遍历一个条目数组,并添加一个带有日期的新day对象(如果该日期不在日期列表中)。你知道吗

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它应该可以工作,但我遗漏了一些东西。你知道吗

谢谢--


Tags: 对象in脚本列表fordate条目数组
2条回答

所以你想把history中的条目附加到entryList中,但只附加给定日期的第一个条目?你知道吗

我认为这是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)

我认为你的代码应该按原样工作:

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

相关问题 更多 >

    热门问题