python - Python:如何根据与其他元组的相似性从大列表中删除元组
问题描述
我对 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]
但这似乎不起作用。
有什么帮助吗?
解决方案
在 Python 中循环遍历列表时,不能修改列表(或集合或字典)。
最简单的解决方案是创建一个新列表。
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))]
推荐阅读
- sql - “此子查询最多可以返回一条记录” ms access sql中的错误
- ruby-on-rails - 在 ActiveAdmin 中选中或取消选中“已批准”后发送电子邮件以通知用户
- cygwin - Cygwin FIFO 与本机 Linux FIFO - 阻塞行为的差异?
- php - PHP将多维数组添加在一起
- java - JUnit 测试中的 System.setProperty
- r - 为什么 arm::sim 与 merTools::predictInterval 预测的一致置信区间不同?
- swift - 尝试发送数据以查看时的映射问题
- android - MaterialCardView 内的子视图缩小和消失
- python - 声明静态值时,Class 中的 NameError 是它自己的控制器
- bash - Bash如何检查变量是否在范围内