【问题标题】:Python: how to remove tuple from a large list based on similarity with other tuplesPython:如何根据与其他元组的相似性从大列表中删除元组
【发布时间】:2019-10-27 18:52:12
【问题描述】:

我在 python 练习中遇到了一些问题。我有一个包含 10 个元素的元组的大列表,其中包含 20 个数字的所有组合。

import itertools

Comb = []

data = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
for i in itertools.combinations(data, 10):
        Comb.append(i)

我想减少列表删除与另一个列表的元组至少有 7 个元素的元组

L=[(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),(11,12,13,14,15,16,17,18,19,20),(1, 2, 3, 5, 6, 7, 9, 10, 11, 12)]

我试过这样解决:

for x in Comb:
    for i, y in enumerate(Comb):
        for j in L:
            similarity = len(set(y).intersection(set(j)))
            if similarity > 7:
              del Comb[i] 

但这似乎不起作用。

有什么帮助吗?

【问题讨论】:

  • 您是否遇到任何错误或只是逻辑问题?
  • @phalanx 它根本不会删除所有具有超过 7 个共同元素的元组。可能是索引有问题...

标签: python list set tuples combinations


【解决方案1】:

当您在 Python 中循环遍历列表时,您无法修改列表(或 set 或 dict)。

最简单的解决方案是创建一个新列表。

import itertools
comb = list(itertools.combinations(range(10), 5))

# We'll remove any element with more than 3 even or odd numbers.
filters = ({0, 2, 4, 6, 8}, {1, 3, 5, 7, 9})
threshold = 3

result = []
for element in comb:
    for filter_element in filters:
        if len(filter_element.intersection(element)) <= threshold:
            result.append(element)

# Make it smaller with a list comprehension
[elt for elt in comb
 if any(len(f.intersection(elt)) <= threshold for f in filters))]

【讨论】:

    【解决方案2】:

    我已经测试过了,它可以工作,打印一些日志只是为了看看发生了什么

    import itertools
    
    Comb = []
    
    data = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];
    for i in itertools.combinations(data, 10):Comb.append(i);
    L=[(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),(11,12,13,14,15,16,17,18,19,20),(1, 2, 3, 5, 6, 7, 9, 10, 11, 12)];
    counter=0
    print(len(Comb))
    for x in Comb:
        for j in L:
            similarity = len(set(x).intersection(set(j)))
            if similarity > 7:
                print(str(similarity)+"\n"+str(set(x))+"\n"+str(set(j))+"\n\n")
                del Comb[counter]
        counter+=1;
    
    print(len(Comb))
    

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多