【发布时间】:2021-10-01 11:20:51
【问题描述】:
你能想出一个更快的算法来解决这个问题吗?或者改进代码?
问题:
我有两个客户 ID:
- ID1(例如电话号码)
- ID2(例如电子邮件地址)
用户有时会更改其 ID1,有时会更改 ID2。怎么能 我找到了唯一用户?
示例:
ID1 = [7, 7, 8, 9]
ID2 = [a, b, b, c]
期望的结果:
ID3 = [Anna, Anna, Anna, Paul]
现实世界的场景大约有。每个列表 600 000 个项目。
这里已经有SQL思路了:How can I match Employee IDs from 2 columns and group them into an array?
我从一个对 TypeScript 有这个想法的朋友那里得到了帮助:https://stackblitz.com/edit/typescript-leet-rewkmh?file=index.ts
我的第二个朋友帮助我编写了一些伪代码,我能够创建这个:
迄今为止最快(不再工作)的代码:
ID1 = [7, 7, 8, 9]
ID2 = ["a", "b", "b", "c"]
def timeit_function(ID1, ID2):
def find_user_addresses():
phone_i = []
email_i = []
tmp1 = [ID1[0]]
tmp2 = []
tmp_index = []
while len(tmp1) != 0 or len(tmp2) != 0:
while len(tmp1) != 0:
tmp_index = []
for index, value in enumerate(ID1):
if value == tmp1[0]:
tmp2.append(ID2[index])
tmp_index.insert(-1, index)
for i in tmp_index:
del ID1[i]
del ID2[i]
tmp1 = list(dict.fromkeys(tmp1))
phone_i.append(tmp1.pop(0))
while len(tmp2) != 0:
tmp_index = []
for index, value in enumerate(ID2):
if value == tmp2[0]:
tmp1.append(ID1[index])
tmp_index.insert(0, index)
for i in tmp_index:
del ID1[i]
del ID2[i]
tmp2 = list(dict.fromkeys(tmp2))
email_i.append(tmp2.pop(0))
return phone_i, email_i
users = {}
i = 0
while len(ID1) != 0:
phone_i, email_i = find_user_addresses()
users[i] = [phone_i, email_i]
i += 1
return users
输出:
{0: [[7, 8], ['a', 'b']], 1: [[9], ['c']]}
含义:{User_0: [[phone1, phone2], [email1, email2]], User_1: [phone3, email3]}
排名
| rank | Username | %timeit | Unique users | Correct output? |
|---|---|---|---|---|
| 1. | Zachary Vance | 32 ms ± 1.9 ms per loop (mean ± std. dev. of 7 runs, 10 loops each) | 1408 | yes |
| 2. | igrinis | 5.54 s ± 81.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) | 1408 | yes |
| (3.) | dkapitan | 8 s ± 106 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) | 3606 | no |
| (4.) | thenarfer | 2.34 µs ± 3.25 µs per loop (mean ± std. dev. of 7 runs, 1 loop each) | 1494 | no |
代码使用两个列表here 运行(需要一些时间来加载)。
【问题讨论】:
-
我添加了排名,因为它们在我的计算机上显示。如果没有人反对,我会将第一个赏金奖励给@Zachary Vance。感谢您的时间和贡献!将来我可能会带着另一个赏金回来!
标签: python common-table-expression recursive-cte