在列表中查找子字符串匹配的每个匹配项并生成单个字符串

2024-05-19 05:52:03 发布

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

我有一个数组,其中列表的每一行都采用以下格式 要素1[tab]要素2[tab]要素3[tab]要素4[eol]

每行的前3个元素在列表中可以有多个实例,如:

11333[tab]55555[tab]EG[tab]455565[EOL]
11332[tab]55555[tab]EG[tab]455563[EOL]
11333[tab]55555[tab]EG[tab]455562[EOL]

每行的最后一个元素是可变的。我要做的是删除列表中的重复数据,并获取重复数据行的最后一个元素,然后用一个字符将它们连接在一起,如: 11333[tab]55555[tab]EG[tab]455565455562[EOL] 11332[tab]55555[tab]EG[tab]455565[EOL]

为了实现这一点,我必须在两个列表之间进行迭代,如下所示:

new_list = []
last_column = ""
for element in list1:
  for otherelement in list 2:
    if last_column == "" :
      last_column += otherelement[3]
    else:
      last_column += "," + otherelement[3]
  new_list.append(element.split(" ")[0:2] + " " + last_column)

不是一字不差,但它让你知道我在做什么。 现在请记住,这些列表中的每一个通常都至少可以有10000行,这意味着对于第一个列表中的每一个项目,都会对照另一个列表中的所有10000个项目进行检查。不理想,当然也不快。你知道吗

有没有一个更好的解决方案我没有想到?你知道吗


Tags: 数据in元素列表newforcolumnelement
3条回答

用你的实际数据展开上一个答案:

from collections import defaultdict

data = [
  "11333    55555   EG  455565",
  "11332    55555   EG  455563",
  "11333    55555   EG  455562"
]

vars_by_common = defaultdict(list)
for d in data:
  parts = d.split("\t")
  common = tuple(parts[:3])  # so it can be a key in a dict
  var = parts[3]

  vars_by_common[common].append(var)

# now rebuild list
new_data = []
for c, v in vars_by_common.items():
  new_data.append("\t".join(c) + "\t" + ",".join(v))

print(new_data)

为了收集和分组数据,^{}似乎是一个很好的选择。请参见下面的示例。你知道吗

from collections import defaultdict

data = [
    [1, 1, 1, 'a'],
    [1, 1, 1, 'b'],
    [1, 1, 2, 'c'],
    [2, 1, 1, 'd'],
]

accumulator = defaultdict(list)
for row in data:
    # use a tuple of the first three elements as the key
    # append the fourth element to a list tracking the values
    accumulator[tuple(row[:-1])].append(row[-1])

print accumulator
# defaultdict(<type 'list'>, {(1, 1, 1): ['a', 'b'], (2, 1, 1): ['d'], (1, 1, 2): ['c']})

将数据转换成本例中使用的表单应该很容易,而获得所需的输出应该正好相反。你知道吗

谢谢大家!使用defaultdict的解决方案要快得多。我从来没有正式计时,但我的解决方案运行了6秒,现在我看大约一秒,也许更少。当要附加的变量项的数量变大时(显然),这显示出显著的改进。你知道吗

我想,唯一的缺点就是因为字典不完美而失去秩序。但秩序对我来说并不重要。你知道吗

相关问题 更多 >

    热门问题