如果您正在尋找內存高效和快速的解決方案,那麼您可以在這裏使用itertools.islice
和itertools.chain
。這將是比@ utdemir的solution快,因爲在過濾步驟沒有的Python for循環涉及:
from itertools import islice, chain
def islice_ashwch(my_list):
for i, j in enumerate(my_list):
for elem in chain(islice(my_list, i), islice(my_list, i+1, None)):
pass
def gen_utd(my_list):
#https://stackoverflow.com/a/22944093/846892
for i, j in enumerate(my_list):
for elem in (v for k, v in enumerate(my_list) if k != i):
pass
時機比較:
In [6]: lst = range(100)
In [7]: %timeit gen_utd(lst)
1000 loops, best of 3: 680 µs per loop
In [8]: %timeit islice_ashwch(lst)
1000 loops, best of 3: 204 µs per loop
In [9]: lst = range(1000)
In [10]: %timeit gen_utd(lst)
10 loops, best of 3: 63.3 ms per loop
In [11]: %timeit islice_ashwch(lst)
100 loops, best of 3: 16.2 ms per loop
我看不出有什麼毛病這種方法 – njzk2
爲什麼無論如何,你是否需要從列表中排除當前的NPC?如果它一動不動,它的新位置就不會和它以前的位置一樣,那麼在列表中留下什麼傷害呢? – Kevin
這很好聽njk2我只是想我的方式可能是一個大列表效率低下。凱文我的想法是,如果我把當前的NPC留在列表中,那麼檢查一個NPC與其他人的職位的方法總是包括檢查一個NPC與自己,所以基本上它不會允許它移動 –