|
|
1
47
在以下情况下使用列表而不是生成器: 1)您需要访问数据 倍数 时间(即缓存结果而不是重新计算结果):
2)你需要 随机存取 (或除转发顺序之外的任何访问):
3)你需要 参加 字符串(需要两次传递数据):
4)您正在使用 派皮 在常规的函数调用和列表操作中,它有时无法尽可能地优化生成器代码。 |
|
|
2
38
一般来说,当需要列表操作时,不要使用生成器,比如len()、reversed()等等。 有时,您可能不希望进行懒惰的评估(例如,提前进行所有计算,以便释放资源)。在这种情况下,列表表达式可能更好。 |
|
|
3
23
外形,外形,外形。 分析您的代码是了解您所做的操作是否有任何效果的唯一方法。 xrange、generator等的大多数用法都是静态大小的小数据集。只有当你接触到大数据集时,它才真正起到作用。range()与xrange()的比较主要是让代码看起来更难看一点,而不是丢失任何东西,或者获得一些东西。 外形,外形,外形。 |
|
|
4
17
|
|
|
5
6
关于性能:如果使用psyco,列表可能比生成器快得多。在下面的示例中,使用psyco.full()时,列表速度快了近50%。
结果:
|
|
6
6
正如你所提到的,“这对大型数据集特别有意义”,我认为这回答了你的问题。 如果您没有遇到任何障碍,从性能上讲,您仍然可以坚持使用列表和标准功能。然后,当您遇到性能问题时,进行切换。 正如@u0b34a0f6ae在注释中提到的,但是,在开始时使用生成器可以使您更容易地扩展到更大的数据集。 |
|
|
7
3
如果以后需要保留其他内容的值,并且集合的大小不太大,那么您应该更喜欢列表理解。 例如: 您正在创建一个列表,稍后将在程序中循环多次。 在某种程度上,您可以将生成器视为迭代(循环)与列表理解的替换,而将其视为数据结构初始化的一种类型。如果要保留数据结构,请使用列表理解。 |
|
|
8
2
就性能而言,我想不出任何时候您会希望在生成器上使用列表。 |
|
|
9
2
我从来没有发现发电机会阻碍你的工作。然而,在很多情况下,使用生成器除了不使用它们之外,对您没有任何帮助。 例如:
在以下方面没有任何改进:
|
|
|
Mayka · 通过带条件的生成器表达式指定两个变量? 8 年前 |
|
Bram Vanroy · 在列表之间获取唯一的产品并维护输入顺序 8 年前 |
|
|
David Trinh · js生成器存在异步问题,并承诺不会返回结果 8 年前 |