【问题标题】:Compare each item in each list of numpy array比较每个 numpy 数组列表中的每个项目
【发布时间】:2021-02-03 10:41:27
【问题描述】:

有没有办法在不合并的情况下对 numpy 数组中的每个列表执行类似的操作?:

for item, nextItem in zip(list,list[1::]): 

我的 numpy 数组:

    for i in range(0, len(list1), lines):
        array1 = np.array(list1[i:i+lines])

样本输出:

['23' '23' '23' '23']

['43' '43' '63' '43']

['43' '43' '43' '43']

我想单步执行 numpy 数组,比较每个列表中的 item/nextItem 而不合并它们? Zip 在常规列表中为我工作:

for item, nextItem in zip(list,list[1::]):
    if item != nextItem:
        #do stuff

提前致谢。任何见解将不胜感激。

【问题讨论】:

  • 使用 numpy arr[:-1] != arr[1:] 返回一个布尔列表,如果 arr 中的连续项不同,则返回 True。 np.where( arr[:-1] != arr[:1] ) 返回 True 的索引的 np.array。你需要做什么样的处理?
  • 对于像这样的迭代处理,列表可能会更快,也更容易。
  • 感谢您为我指明正确的方向...尝试计数和删除连续重复项,保持相同数量的列表。样本结果应该是:[23] [43,63,43] [43]

标签: python arrays list numpy zip


【解决方案1】:

itertools.groupby 计算列表中的连续重复项。在这里它被应用于列表列表:

from itertools import groupby
line = 0
list1 = [['23', '23', '23', '23'], ['43', '43', '63', '43'], ['43', '43', '43', '43']]

for x in list1:
    a = [[i, len([*group])] for i, group in groupby(list1[line])]
    line+=1
    print(a)

#RESULT:
    [['23', 4]]
    [['43', 2], ['63', 1], ['43', 1]]
    [['43', 4]]   

Counting consecutive duplicates of strings from a list

【讨论】:

  • chain from itertools 也可用于展平结果列表: from itertools import chain; b = list(it.chain.from_iterable(a));打印(b)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-16
  • 1970-01-01
  • 2011-06-27
  • 2020-11-03
相关资源
最近更新 更多