我可以把一组数值放到字典里,让每个数值都对应它的索引。以下是其中一种实现方法:
这并不错,但我正在寻找更加优雅的内容。
我遇到了以下内容,但它与我需要的相反:
请分享你的解决方案, 谢谢
编辑:Python 2.6.4
对于包含1000个元素的列表,dict(zip)版本是最快的,生成器和列表推导式版本基本相同,它们慢约1.5倍,并且函数式map(reversed)要慢得多。 $ python -mtimeit -s"t = range(int(1e3))" "d = dict(zip(t, range(len(t))))" 1000次循环,最好的结果为3: 277微秒每个循环 $ python -mtimeit -s"t = range(int(1e3))" "d = dict([(y,x) for x,y in enumerate(t)])" 1000次循环,最好的结果为3: 426微秒每个循环 $ python -mtimeit -s"t = range(int(1e3))" "d = dict((y,x) for x,y in enumerate(t))" 1000次循环,最好的结果为3: 437微秒每个循环 $ python -mtimeit -s"t = range(int(1e3))" "d = dict(map(reversed, enumerate(t)))" 100次循环,最好的结果为3: 3.66毫秒每个循环
我尝试对更长和更短的列表运行相同的测试(1e2,1e4,1e5),每个循环的时间与列表长度成线性比例关系。 有人可以计时py 2.7+版本吗?
>>> t = (5,6,7)
>>> d = dict(zip(t, range(len(t))))
>>> d
{5: 0, 6: 1, 7: 2}
这并不错,但我正在寻找更加优雅的内容。
我遇到了以下内容,但它与我需要的相反:
>>> d = dict(enumerate(t))
>>> d
{0: 5, 1: 6, 2: 7}
请分享你的解决方案, 谢谢
编辑:Python 2.6.4
对于包含1000个元素的列表,dict(zip)版本是最快的,生成器和列表推导式版本基本相同,它们慢约1.5倍,并且函数式map(reversed)要慢得多。 $ python -mtimeit -s"t = range(int(1e3))" "d = dict(zip(t, range(len(t))))" 1000次循环,最好的结果为3: 277微秒每个循环 $ python -mtimeit -s"t = range(int(1e3))" "d = dict([(y,x) for x,y in enumerate(t)])" 1000次循环,最好的结果为3: 426微秒每个循环 $ python -mtimeit -s"t = range(int(1e3))" "d = dict((y,x) for x,y in enumerate(t))" 1000次循环,最好的结果为3: 437微秒每个循环 $ python -mtimeit -s"t = range(int(1e3))" "d = dict(map(reversed, enumerate(t)))" 100次循环,最好的结果为3: 3.66毫秒每个循环
我尝试对更长和更短的列表运行相同的测试(1e2,1e4,1e5),每个循环的时间与列表长度成线性比例关系。 有人可以计时py 2.7+版本吗?