我在here中发布了一个代码以供审阅。然而,根据现在它没有收到正确的回应,我认为这是由于代码的长度。在这里我将把它切中要害。假设我们有以下列表:
t0=[('Albania','Angola','Germany','UK'),('UK','France','Italy'),('Austria','Bahamas','Brazil','Chile'),('Germany','UK'),('US')]
t1=[('Angola', 'UK'), ('Germany', 'UK'), ('UK', 'France'), ('UK', 'Italy'), ('France', 'Italy'), ('Austria', 'Bahamas')]
t2=[('Angola:UK'), ('Germany:UK'), ('UK:France'), ('UK:Italy'), ('France:Italy'), ('Austria:Bahamas')]
目标是t1
中的每一对,我们经过t0
,如果找到这一对,我们就用相应的t3
元素替换它,我们可以使用以下方法:
result = []
for v1, v2 in zip(t1, t2):
out = []
for i in t0:
common = set(v1).intersection(i)
if set(v1) == common:
out.append(tuple(list(set(i) - common) + [v2]))
else:
out.append(tuple(i))
result.append(out)
pprint(result, width=100)
它给出:
[[('Albania', 'Germany', 'Angola:UK'),
('UK', 'France', 'Italy'),
('Austria', 'Bahamas', 'Brazil', 'Chile'),
('Germany', 'UK'),
('U', 'S')],
[('Albania', 'Angola', 'Germany:UK'),
('UK', 'France', 'Italy'),
('Austria', 'Bahamas', 'Brazil', 'Chile'),
('Germany:UK',),
('U', 'S')],
[('Albania', 'Angola', 'Germany', 'UK'),
('Italy', 'UK:France'),
('Austria', 'Bahamas', 'Brazil', 'Chile'),
('Germany', 'UK'),
('U', 'S')],
[('Albania', 'Angola', 'Germany', 'UK'),
('France', 'UK:Italy'),
('Austria', 'Bahamas', 'Brazil', 'Chile'),
('Germany', 'UK'),
('U', 'S')],
[('Albania', 'Angola', 'Germany', 'UK'),
('UK', 'France:Italy'),
('Austria', 'Bahamas', 'Brazil', 'Chile'),
('Germany', 'UK'),
('U', 'S')],
[('Albania', 'Angola', 'Germany', 'UK'),
('UK', 'France', 'Italy'),
('Brazil', 'Chile', 'Austria:Bahamas'),
('Germany', 'UK'),
('U', 'S')]]
此列表的长度为6,表示t1
和t2
中有6个元素,每个子列表有5个元素,对应于t0
中的元素数。从目前的情况来看,代码很快,但在我的例子中,我有t0
,它的长度约为48000,t1的长度约为30000。运行时间几乎是永远的我想知道如何用更快的方法执行相同的操作?你知道吗
你可以用一个双重列表来理解。该代码的运行速度约为3.47倍(13.3µs vs 46.2µs)。你知道吗
相关问题 更多 >
编程相关推荐