从tup创建组合

2024-06-25 07:01:35 发布

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

我从数据库获取数据。从数据库中,它们以元组的形式出现:

[('test1', 'test12', 'test13', 'test14'),
('test21', 'test22', 'test23', 'test24'), 
('test31', 'test32', 'test33', 'test34'), 
('test41', 'test42', 'test43', 'test44'), 
('test51', 'test52', 'test53', 'test54'), 
('test61', 'test62', 'test63', 'test64'), 
('test71', 'test72', 'test73', 'test74'), 
('test81', 'test82', 'test83', 'test84'), 
('test91', 'test92', 'test93', 'test94'), 
('test11', 'test12', 'test13', 'test14')]

这就是我想要的: 组合这些输入。。。所以我的输出有4个参数的组合(例如在示例中)和。。。你知道吗

1)最重要的是,在新的组合中,值总是在它的位置上,即如果在原始组合中,值是索引[1],这意味着在新的组合中,它也应该是[1]。。。你知道吗

2)没有重复的组合

例如:

我得到了元组:

[('test91', 'test92', 'test93', 'test94'), 
('test11', 'test12', 'test13', 'test14')]

从中我得到了新的组合:

[('test91', 'test12', 'test13', 'test14'), 
('test11', 'test92', 'test93', 'test94')]

也许可以用两两或其他方法来做。 救命啊。你知道吗


Tags: 数据库形式元组test1test12test23test13test11
1条回答
网友
1楼 · 发布于 2024-06-25 07:01:35

您需要使用内置包^{}中的^{}方法,该方法给出输入iterables的笛卡尔积。你知道吗

这是你想要的代码。 但是要小心,因为庞大的列表会产生大量的组合,所以尽量不要耗尽内存。你知道吗

from itertools import product


data = [('test91', 'test92', 'test93', 'test94'), 
('test11', 'test12', 'test13', 'test14')]

b = list(zip(*a))  # making list of n-th elements
# b = [('test91', 'test11'),  <- first elements
# ('test92', 'test12'),  <- second elements
# ('test93', 'test13'),  <- third elements
# ('test94', 'test14')]
variations = product(*b)
output = set(variations) - set(a)  # this is unique variations without input data
#  output = {('test11', 'test12', 'test13', 'test94'),
#  ('test11', 'test12', 'test93', 'test14'),
#  ('test11', 'test12', 'test93', 'test94'),
#  ('test11', 'test92', 'test13', 'test14'),
#  ('test11', 'test92', 'test13', 'test94'),
#  ('test11', 'test92', 'test93', 'test14'),
#  ('test11', 'test92', 'test93', 'test94'),
#  ('test91', 'test12', 'test13', 'test14'),
#  ('test91', 'test12', 'test13', 'test94'),
#  ('test91', 'test12', 'test93', 'test14'),
#  ('test91', 'test12', 'test93', 'test94'),
#  ('test91', 'test92', 'test13', 'test14'),
#  ('test91', 'test92', 'test13', 'test94'),
#  ('test91', 'test92', 'test93', 'test14')}

如果您想输出与输入数据,您可以简单地

output = set(variations)

如果你需要一个列表而不是一个集合,那就做吧

output = list(output)

相关问题 更多 >