【问题标题】:How to duplicate list values using matching value index from another list?如何使用来自另一个列表的匹配值索引来复制列表值?
【发布时间】:2014-02-12 03:57:35
【问题描述】:

我有两个列表:

A = [476, 1440, 3060, 3060, 500,500]
B = [0,4,10,15]

注意:列表 B 的长度将始终等于列表 A 中的单个值加上配对值的数量。更新后的列表 B 将匹配列表 A 的长度。

我想检查列表 A 中的重复值,并使用其索引位置复制列表 B 中的对应值。例如,列表 A 有 A[2]=A[3] 和 A[4]=A [5](3060 和 500),所以基于此我想复制 B[2] 和 B[3] 并分别在 B[3] 和 B[5] 处添加它们。所以更新后的列表 B 看起来像:

B = [0,4,10,10,15,15] 

我尝试以下获取重复值的起始索引:

C = [x==A[i-1] for i,x in enumerate(A)][1:]

for idx,l in enumerate(C):
    if l == True:
        print "idx"

但将这一更改纳入列表 B 的时间很短。任何建议都将不胜感激。

【问题讨论】:

  • List B 总是独一无二的吗?如果相同的数字在A中出现两次以上怎么办
  • 两个列表都会不断变化。相同的数字只会在列表 A 中出现两次,不会超过。
  • 如果A = [200, 500, 3060, 3060, 500]B = [0,4,10,15] 你会怎么回答?
  • 情况并非如此。 A 中的重复值将彼此相邻。
  • 你应该添加一个更好的例子,一个包含多个重复项的例子。

标签: python list python-2.7


【解决方案1】:

这是一个幼稚的实现(不确定我的要求是否正确):

>>> from itertools import groupby
>>> A = [476, 1440, 3060, 3060, 500, 500]
>>> B = [0, 4, 10, 15]
>>> Result = []
>>> for i, g in enumerate(groupby(A)):
        Result += [B[i]] * len(list(g[1]))


>>> Result
[0, 4, 10, 10, 15, 15]

【讨论】:

  • 另外一件事:如果我要调整多个列表,如何将它们作为您在答案中提供的单个 for 循环的一部分包含在内?
猜你喜欢
  • 1970-01-01
  • 2015-02-12
  • 1970-01-01
  • 2014-03-09
  • 1970-01-01
  • 1970-01-01
  • 2019-05-08
  • 2020-10-08
  • 2018-07-15
相关资源
最近更新 更多