生成器v / s返回列表 - Python

时间:2016-03-08 20:03:16

标签: performance list python-3.x generator

我正在用Python编写一个程序,它返回/检索给定列表中的所有相邻元素。所以我开发了两个函数:

将所有这些相邻值存储在列表中并返回列表的那个:

def ret_adj(data):
#adjs = []
visited = []
for i in data:

    if i in visited:
        #adjs.append(i)
        yield i
    else:
        visited.append(i)
    if data[data.index(i)+1] != i:
        del visited[:]

#return adjs

产生价值的那个:

    if i in visited:
        #adjs.append(i)
        yield i
    else:
        visited.append(i)
    if data[data.index(i)+1] != i:
        del visited[:]

所以我的问题基本上是,哪种方法更有效?将所有值作为列表返回,还是产生它们?

1 个答案:

答案 0 :(得分:1)

通常,generator会更有效,特别是对于大型数据集。

另一方面,如果您处理数据的常用方法是立即将generator转换为list,那么您最好只是首先返回列表。< / p>