如何进行for循环或列表理解,以便每次迭代都给出两个元素?
l = [1,2,3,4,5,6]
for i,k in ???:
print str(i), '+', str(k), '=', str(i+k)
Run Code Online (Sandbox Code Playgroud)
输出:
1+2=3
3+4=7
5+6=11
Run Code Online (Sandbox Code Playgroud) 我有时需要在Python中迭代一个列表,查看"current"元素和"next"元素.到目前为止,我已经完成了以下代码:
for current, next in zip(the_list, the_list[1:]):
# Do something
Run Code Online (Sandbox Code Playgroud)
这有效并且符合我的预期,但是有更多惯用或有效的方法来做同样的事情吗?
问题很简单,我想迭代遍历列表中的每个元素和成对的下一个元素(将最后一个元素包装在第一个元素中).
我想过两种非常规的方式:
def pairs(lst):
n = len(lst)
for i in range(n):
yield lst[i],lst[(i+1)%n]
Run Code Online (Sandbox Code Playgroud)
和:
def pairs(lst):
return zip(lst,lst[1:]+[lst[:1]])
Run Code Online (Sandbox Code Playgroud)
预期产量:
>>> for i in pairs(range(10)):
print i
(0, 1)
(1, 2)
(2, 3)
(3, 4)
(4, 5)
(5, 6)
(6, 7)
(7, 8)
(8, 9)
(9, 0)
>>>
Run Code Online (Sandbox Code Playgroud)
有关更多pythonic方式的任何建议吗?也许有一个我没有听说过的预定义功能?
也是一个更普遍的n折(有三胞胎,四重奏等代替对)版本可能很有趣.
假设我有一个清单
xs = [0,1,2,3]
[some_function(current, next) for current, next in zip(xs, xs[1:])]
Run Code Online (Sandbox Code Playgroud)
我想迭代这个列表的对(当前,下一个).澄清zip创建列表[(0,1),(1,2),(2,3)]
问题是,如果xs是生成器而不是列表来实现这一点,我需要从中创建一个列表,这肯定不是最佳解决方案.
给出以下列表:
l1 = [0,1000,5000,10000,20000,30000,40000,50000]
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过查看每对连续的数字来创建它的块:
def chunker(seq, size):
return (seq[pos:pos + size] for pos in range(0, len(seq), size))
for group in chunker(l1, 2):
print(group)
Run Code Online (Sandbox Code Playgroud)
返回:
[0, 1000]
[5000, 10000]
[20000, 30000]
[40000, 50000]
Run Code Online (Sandbox Code Playgroud)
如何确保[1000,5000]也包括重叠的时间间隔?
预期产量:
[0, 1000]
[1000, 5000]
[5000, 10000]
[10000, 20000]
[20000, 30000]
[30000, 40000]
[40000, 50000]
Run Code Online (Sandbox Code Playgroud) 我想访问生成器中相邻值的重叠对。
如果它是一个列表,我可以使用
a = [5, 7, 11, 4, 5]
for v, w in zip(a[:-1], a[1:]):
print [v, w]
Run Code Online (Sandbox Code Playgroud)
这是来自这个问题。
但是当我尝试对生成器执行相同操作时,出现错误
TypeError: 'generator' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)
有没有办法为发电机做到这一点?
我想将一个简单的字典转换为这样的:d = {0:0, 1:1, 2:2, 3:3}到一个字典列表,其中每个字典的元素数量与此相同(或如此):[{0:0, 2:2}, {1:1, 3:3}]。我尝试过使用简单的索引,就像我使用列表一样,但它给了我一个TypeError: unhashable type: 'slice'. 这是我现在所拥有的:
def dico_chunks(dico, n):
if len(dico) < n:
n = len(dico)
return [dico[i::n] for i in range(n)]
Run Code Online (Sandbox Code Playgroud)
请记住,无论如何我都不需要按顺序排列列表。n我只需要将我的主字典分成子字典列表。