from random import randrange
data = [(randrange(8), randrange(8)) for x in range(8)]
Run Code Online (Sandbox Code Playgroud)
我们必须测试第一个项目是否等于尾部之一.我很好奇我们怎么会做的最简单的方法不复制尾项新的名单?请考虑到这一段代码获取,比如说,update()方法执行多次,因此它必须是快速地.
使用额外的列表(不必要的内存浪费,我猜):
head = data[0]
result = head in data[1:]
Run Code Online (Sandbox Code Playgroud)
好的,这是另一种方式(太冗长):
i = 1
while i < len(data):
result = head == data[i]
if result:
break
i+=1
Run Code Online (Sandbox Code Playgroud)
解决这个问题的Pythonic方法是什么?谢谢.
用islice.它不会复制列表,并且基本上将您的第二个(优雅但冗长的)解决方案嵌入到C模块中.
import itertools
head = data[0]
result = head in itertools.islice(data, 1, None)
Run Code Online (Sandbox Code Playgroud)
进行演示:
>>> a = [1, 2, 3, 1]
>>> head = a[0]
>>> tail = itertools.islice(a, 1, None)
>>> head in tail
True
Run Code Online (Sandbox Code Playgroud)
请注意,你只能遍历一次,但如果你想做的就是检查头部是否在尾部并且你担心记忆,那么我认为这是最好的选择.
替代方式,
# 1
result = data.count(data[0]) > 1
# 2
it = iter(data)
result = it.next() in it
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7422 次 |
| 最近记录: |