相关疑难解决方法(0)

生成器表达式与列表理解

什么时候应该使用生成器表达式?什么时候应该在Python中使用列表推导?

# Generator expression
(x*2 for x in range(256))

# List comprehension
[x*2 for x in range(256)]
Run Code Online (Sandbox Code Playgroud)

python list-comprehension generator

390
推荐指数
7
解决办法
13万
查看次数

条件生成器表达式的意外行为

我正在运行一段代码,意外地在程序的某个部分出现了逻辑错误.在调查该部分时,我创建了一个测试文件来测试正在运行的语句集,并发现一个看起来非常奇怪的异常错误.

我测试了这个简单的代码:

array = [1, 2, 2, 4, 5] # Original array
f = (x for x in array if array.count(x) == 2) # Filters original
array = [5, 6, 1, 2, 9] # Updates original to something else

print(list(f)) # Outputs filtered
Run Code Online (Sandbox Code Playgroud)

输出是:

>>> []
Run Code Online (Sandbox Code Playgroud)

是的,没什么.我期待过滤器理解能够在数组中获取数量为2的项并输出它,但我没有得到:

# Expected output
>>> [2, 2]
Run Code Online (Sandbox Code Playgroud)

当我评论第三行再次测试时:

array = [1, 2, 2, 4, 5] # Original array
f = (x for x in array if array.count(x) == 2) # Filters original
### array …
Run Code Online (Sandbox Code Playgroud)

python generator generator-expression variable-assignment

57
推荐指数
5
解决办法
2594
查看次数

生成器理解列表理解的不同输出?

当使用列表理解与生成器理解时,我得到不同的输出.这是预期的行为还是一个错误?

请考虑以下设置:

all_configs = [
    {'a': 1, 'b':3},
    {'a': 2, 'b':2}
]
unique_keys = ['a','b']
Run Code Online (Sandbox Code Playgroud)

如果我然后运行以下代码,我得到:

print(list(zip(*( [c[k] for k in unique_keys] for c in all_configs))))
>>> [(1, 2), (3, 2)]
# note the ( vs [
print(list(zip(*( (c[k] for k in unique_keys) for c in all_configs))))
>>> [(2, 2), (2, 2)]
Run Code Online (Sandbox Code Playgroud)

这是在python 3.6.0上:

Python 3.6.0 (default, Dec 24 2016, 08:01:42)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Run Code Online (Sandbox Code Playgroud)

python

26
推荐指数
3
解决办法
1880
查看次数