【发布时间】:2016-08-05 09:19:12
【问题描述】:
data是一个列表,其中每个条目是一个浮点数列表L是一个范围,用于检查_在data中的第一个条目是否等于,如果是,则将其存储在c中的该索引处
c = []
d = []
for i in range(L):
for seq in data:
if int(seq[0]) == i:
d.append(seq)
c.append(d)
d = []
return c
>>> data = [[4.0, 0.0, 15.0, 67.0], [3.0, 0.0, 15.0, 72.0], [4.0, 0.0, 15.0, 70.0], [1.0, -0.0, 15.0, 90.0], [3.0, -0.0, 15.0, 75.0], [2.0, -0.0, 15.0, 83.0], [3.0, 0.0, 15.0, 74.0], [4.0, 0.0, 15.0, 69.0], [4.0, 0.0, 14.0, 61.0], [3.0, 0.0, 15.0, 74.0], [3.0, 0.0, 15.0, 75.0], [4.0, 0.0, 15.0, 67.0], [5.0, 0.0, 14.0, 45.0], [6.0, 0.0, 13.0, 30.0], [3.0, 0.0, 15.0, 74.0], [4.0, 0.0, 15.0, 55.0], [7.0, 0.0, 13.0, 22.0], [6.0, 0.0, 13.0, 25.0], [1.0, -0.0, 15.0, 83.0], [7.0, 0.0, 13.0, 18.0]]
>>> sort(data,7)
[[], [[1.0, -0.0, 15.0, 90.0], [1.0, -0.0, 15.0, 83.0]], [[2.0, -0.0, 15.0, 83.0]], [[3.0, 0.0, 15.0, 72.0], [3.0, -0.0, 15.0, 75.0], [3.0, 0.0, 15.0, 74.0], [3.0, 0.0, 15.0, 74.0], [3.0, 0.0, 15.0, 75.0], [3.0, 0.0, 15.0, 74.0]], [[4.0, 0.0, 15.0, 67.0], [4.0, 0.0, 15.0, 70.0], [4.0, 0.0, 15.0, 69.0], [4.0, 0.0, 14.0, 61.0], [4.0, 0.0, 15.0, 67.0], [4.0, 0.0, 15.0, 55.0]], [[5.0, 0.0, 14.0, 45.0]], [[6.0, 0.0, 13.0, 30.0], [6.0, 0.0, 13.0, 25.0]]]
len(data) 约为 200 万L 约为 8000。
我需要一种方法来理想地加快速度!
【问题讨论】:
-
您能否添加一些输入和预期输出,因为我不遵循您的逻辑?使用像
_这样的东西作为你实际使用的变量名也无济于事 -
只是一个简短的提示:下划线
_通常表示迭代中的一次性变量。您可能需要重命名它,因为它可能会混淆阅读您的代码的其他人。 -
在任何情况下:你一遍又一遍地迭代
data,但你可能会注意到给定一个元素seq的数据,如果int(seq[0]) == i那么该元素将完全不匹配i的不同值的其他迭代!您可以考虑从c = [[] for _ in range(L)]开始,然后执行:for el in data: c[int(el)].append(el)。唯一的问题是,如果你有int(seq[0]) > L的值,你的代码会“忽略”它们,而这个给出的是IndexError。 -
您是否尝试通过整数类型转换bucket-sort您的浮点值?
-
或者:将
c更改为defaultdict(list),然后执行:for seq in data: c[int(seq[0])].append(seq)这应该独立于seq[0]中的值。
标签: python performance list nested repeat