相关疑难解决方法(0)

如何从列表列表中制作一个平面列表?

我想知道是否有一条快捷方式可以在Python列表中列出一个简单的列表.

我可以在for循环中做到这一点,但也许有一些很酷的"单行"?我用reduce尝试了,但是我收到了一个错误.

l = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
reduce(lambda x, y: x.extend(y), l)
Run Code Online (Sandbox Code Playgroud)

错误信息

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <lambda>
AttributeError: 'NoneType' object has no attribute 'extend'
Run Code Online (Sandbox Code Playgroud)

python list flatten multidimensional-array

2950
推荐指数
29
解决办法
184万
查看次数

在Python中重置生成器对象

我有多个yield返回的生成器对象.准备调用这台发电机是相当费时的操作.这就是我想多次重用发生器的原因.

y = FunctionWithYield()
for x in y: print(x)
#here must be something to reset 'y'
for x in y: print(x)
Run Code Online (Sandbox Code Playgroud)

当然,我正在考虑将内容复制到简单的列表中.

python yield generator

133
推荐指数
8
解决办法
6万
查看次数

在Python中将列表迭代为对(当前,下一个)

我有时需要在Python中迭代一个列表,查看"current"元素和"next"元素.到目前为止,我已经完成了以下代码:

for current, next in zip(the_list, the_list[1:]):
    # Do something
Run Code Online (Sandbox Code Playgroud)

这有效并且符合我的预期,但是有更多惯用或有效的方法来做同样的事情吗?

python

121
推荐指数
7
解决办法
4万
查看次数

如何在没有递增的情况下获取迭代器当前指向的项目?

有没有办法让python中的迭代器指向该项而不增加迭代器本身?例如,如何使用迭代器实现以下内容:

looking_for = iter(when_to_change_the_mode)
for l in listA:
    do_something(looking_for.current())
    if l == looking_for.current():
        next(looking_for)
Run Code Online (Sandbox Code Playgroud)

python iterator

18
推荐指数
2
解决办法
2万
查看次数

如何“查看”迭代器,同时保留项目?

假设我想查看迭代器的第五个项目,但我想保留所有项目。最好的方法是什么?有模块吗?我可能可以将一个函数组合在一起来创建一个新的迭代器,但我想知道它是否已经完成了?

python iterator python-2.7

6
推荐指数
2
解决办法
3891
查看次数

Python itertools-takewhile():多个谓词

假设一个发生器逐个产生以下元组(从左到右)

(1, 2, 3), (2, 5, 6), (3, 7, 10), (4, 5, 11), (3, 5, 15), (4, 5, 9), (4, 6, 12)
...
Run Code Online (Sandbox Code Playgroud)

假设只要谓词为真,我就想迭代.让那个谓词成为sum(yielded_value) < 20.然后迭代器将停止(3, 5, 15).我可以这样做,说:

list(itertools.takewhile(lambda x: sum(x) < 20, some_generator()))
Run Code Online (Sandbox Code Playgroud)

问题,如何用两个谓词编写类似的表达式?假设我想:

list(itertools.takewhile(lambda x: sum(x) < 20 and first_value_of_tuple > 3, some_generator()))
Run Code Online (Sandbox Code Playgroud)

(在这种情况下,停在(4, 6, 12).)

python python-3.x

4
推荐指数
1
解决办法
526
查看次数