Python 过滤器是否保留列表顺序?

Python 过滤器是否保留列表顺序?,python,filter,Python,Filter,假设您调用列表上的“filter”函数,并使用它查找满足某个属性的所有元素。输出列表中的元素是否保证与输入列表中的元素顺序相同?来自for过滤器: 请注意,filter(function,iterable)相当于生成器表达式(iterable if function(item))中的item对应的item) 由于等效的生成器表达式将保留顺序,过滤器也保证保留顺序。简单的答案是肯定的。列表是按顺序排列的,并且过滤器生成器按顺序一次读取每个项目。因此,它将按顺序产生输出 >>> e

假设您调用列表上的“filter”函数,并使用它查找满足某个属性的所有元素。输出列表中的元素是否保证与输入列表中的元素顺序相同?

来自for
过滤器:

请注意,
filter(function,iterable)
相当于生成器表达式
(iterable if function(item))中的item对应的item)


由于等效的生成器表达式将保留顺序,
过滤器也保证保留顺序。

简单的答案是肯定的。列表是按顺序排列的,并且
过滤器
生成器按顺序一次读取每个项目。因此,它将按顺序产生输出

>>> example = list(range(10))
>>> list(filter(lambda n: n % 2, example))
[1, 3, 5, 7, 9]

谢谢你的快速回答!我看了那些文件,但我不知道发电机是如何工作的,所以我没有意识到它们维护了秩序。@Jessica是的,这有点像兔子洞;最后,
过滤器
、生成器表达式、列表理解等都依赖于对象的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
方法,如果对象的顺序类似于
列表
元组
,则该方法按顺序迭代每个元素。谢谢Alex!还有哪些数据结构可以算作“有序的可重用数据”呢?我知道哈希表可能不会。列表是唯一的吗?@Jessica Tuples、strings、OrderedDict、Queue、deque以及实现
集合.abcs.Sequence
的所有东西。列表、字符串、元组等。无序的包括字典或集合,它们的顺序是任意的,或者迭代器,比如
range
,因为我们一次没有完整的内存。谢谢,这非常有用。