【发布时间】:2013-08-24 01:43:18
【问题描述】:
我不知道如何使这两个数组相交:
a = [[125, 1], [193, 1], [288, 23]]
b = [[108, 1], [288, 1], [193, 11]]
result = [[288,24], [193, 12]]
所以交集是第一个元素,数组的第二个元素相加,有什么想法可以有效地做到这一点吗?
好吧,我犯了一个错误,没有解释我所说的高效,对不起。考虑以下简单的实现:
a = [[125, 1], [193, 1], [288, 23]]
b = [[108, 1], [288, 1], [193, 11]]
result = {}
for i, j in a:
for k, l in b:
if i == k:
result[i] = j + l
print result
所以我试图找到一种方法来更有效地解决我的问题,在某种程度上更pythonic。所以这就是为什么我需要你的帮助。
试试这个测试用例(我的代码也在上面):
运行时间:28.6980509758
【问题讨论】:
-
如果a中有两个匹配的元素应该怎么做?它们也应该相加吗?例如,
a = [[100, 1], [100, 2]]、b = [[50, 1]] -
我不知道我会将这些数据保留为列表列表。也许字典或更好的计数器会更有意义。
-
如果您认真使用“高效”这个词,您尝试过哪些替代方案,为什么它们的性能不足?另外,非常重要的是,数据集的大小是多少?
-
@badc0re 关于使用表达性(并且易于编写、测试和理解)的语言特性与效率(也非常重要)似乎存在争议。在这种特殊情况下,你为什么不帮助我们解决这个问题?您能否对不同的答案进行测试并计时并发布?
-
@badc0re 您的期望是什么?为什么29秒不好?这个非常重要。大多数有经验的开发人员会逐步提高性能(并降低可读性),直到性能可以接受并且一点也不。他们重视自己的时间以及可能遇到他们代码的其他开发人员的时间。
标签: python