【问题标题】:Deleting elements in a list by their value as index按索引值删除列表中的元素
【发布时间】:2017-12-16 22:47:46
【问题描述】:

我有一个不是从零开始的时间序列中的天数的列表:

days = [2,3,4,5,...]

我还有另一个列表是从第 0 天开始的所有日子的云分钟数:

weather = [0,120,150,60,120,30,300,...]

我想遍历days,如果weather中的对应索引大于某个值,则将其删除。

我试过了

downtime = 100
days_new = [x for i, x in enumerate(days) if weather[i] < downtime]

这应该会导致:

days_new = [3,5,...]

因为删除的索引 (2,4) 在列表 weather 中具有大于 100 的值。

但它是根据days索引 而不是它作为索引的值来删除它们。 IE。这仅适用于我的列表从 0 开始,而不是任何大于 0 的整数。我该如何解决这个问题?

【问题讨论】:

  • @ChristianDean 因为他们将这些保留在索引&lt;
  • 您发布的代码应该可以工作。
  • @MosesKoledoye 啊,我明白他的意思了。他说的方式有点令人困惑。
  • 除非两个列表不同步在这种情况下你必须做days_new = [x for i, x in enumerate(days) if weather[i + 2] &lt; downtime]

标签: python list indexing list-comprehension


【解决方案1】:

你可以试试这个方法:

days = [2,3,4,5,...]
weather = [0,120,150,60,120,30,300,...]
downtime = 100
days_new = []
for x in days:
    if weather[x] < downtime:
        days_new.append(x)

# output :
days_new = [3, 5,...]

【讨论】:

    【解决方案2】:

    你可以试试这个

    [x for x in days if weather[x] <= 100]
    

    输出,供您输入:

    [3, 5]
    

    【讨论】:

      【解决方案3】:

      如果从days 中给出所有日期和日期的天气是天气索引:

      downtime = 100
      new_days = [day for day in days if weather[day] <= downtime]
      

      【讨论】:

        【解决方案4】:

        您的要求假设weather 可以订阅days 中的所有项目,在这种情况下您不需要enumerate。直接用days中的索引索引weather

        days_new = [x for x in days if weather[x] < downtime]
        

        【讨论】: