我想基于(n-1)元组列表和一个列表创建一个n元组列表
下面是n=3和列表长度为5的最小化示例
import itertools
# create a list with 5 elements
t1_list = [x for x in range(1,6)]
print(t1_list) # [1, 2, 3, 4, 5]
# create 2-tuples out of t1_list
t2 = itertools.combinations(t1_list,2)
t2_list = [x for x in t2]
print(t2_list) # [(1, 2), (1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5), (3, 4), (3, 5), (4, 5)]
# remove some tuples based on some criterion
del t2_list[1]
del t2_list[4]
print(t2_list) # [(1, 2), (1, 4), (1, 5), (2, 3), (2, 5), (3, 4), (3, 5), (4, 5)]
# now create a list of 3-tuples based on t2_list and t1_list
# i.e. without combinations containing (1,3) and (2,4) because they have been removed
# ???
# Result should be:
# [(1, 2, 5), (1, 4, 5), (2, 3, 5), (3, 4, 5)]
我想从t1_list
中创建所有可能的n元组,然后删除包含已删除(n-1)元组的元组不是一个好主意,因为在稍后的阶段,我希望使用100个元素列表中的10个元组来执行此操作
有没有一种聪明的方法可以用itertools
实现这一点
编辑:如何获得所需结果的说明:
(1, 2, 4)
被排除是因为(2, 4)
不在t2_list
中,而(1, 2, 3)
被排除是因为(1,3)
不在t2_list
中
一般规则是:只有当n元组的所有(n-1)元组都存在于t(n-1)_list
中时,才会包含n元组。或者反过来说:如果n元组的一个或多个(n-1)元组在t(n-1)_list
中丢失,则n元组将被排除
这就是我在这段时间里取得的成就。下面的示例显示了长度为6的列表(与原始问题不同)。 结果似乎是正确的。然而,我不知道这是否是一个好的、高效的代码,特别是当
t1_list
将有100个元素,并且它将增加到8或10个元组时。我需要进一步测试。欢迎提出改进建议代码:
结果:
相关问题 更多 >
编程相关推荐