【问题标题】:print selected indexes in a python list在 python 列表中打印选定的索引
【发布时间】:2018-04-21 04:10:16
【问题描述】:

在这种情况下,由于选择标准,我想出了以下列表:

allowed_max = [21, 21, 21, 18, 16, 17, 22, 36, 36, 36, 34, 34, 13, 13, 13, 12, 26, 26, 28, 28, 28, 27, 26]

什么时候,我使用下面的命令参考它的原始列表索引列表;

index_max = [data_series.index(i) for i in allowed_max]

打印列表后,我会得到以下值:

index_max = [5, 5, 5, 6, 7, 14, 15, 16, 16, 16, 18, 18, 26, 26, 26, 27, 32, 32, 34, 34, 34, 35, 32]

现在,我只想要列表中与图案宽度等效的值,在这种情况下为三个。

pattern_width = 3

因此,在这种情况下,我想从列表中取出并附加到新列表中的值是 5、16、26 和 34。 我应该使用什么命令来获得最终答案?

final_answer = [5, 16, 26, 34]

注意:我不允许使用 numpy。谢谢!

【问题讨论】:

  • 所以index_max 没有排序,您不希望final_answer 包含 32,因为它的第三个条目出现在列表末尾太晚了?
  • 哦,我不想要 32,因为与最终答案中的值相比,它不会同时发生

标签: python-3.x list indexing


【解决方案1】:

您可以遍历index_max 并检查当前项与以下两项是否相等:

final_answer = [
    index_max[i]
    for i in range(len(index_max)-2)
    if index_max[i] == index_max[i+1] == index_max[i+2]
]

或者,如果顺序无关紧要并且您只想计数项目,您可以使用Counter 对象:

from collections import Counter
counter = Counter(index_max)
final_answer = [ key for key, val in counter.items() if val == 3 ]

(第二个解决方案产生[5, 16, 26, 32, 34] - 不完全符合您的要求。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多