def partition(n, iterable):
p = izip_longest(*([iter(iterable)] * n))
r = []
for x in p:
print(x) #I added this
s = set(x)
s.discard(None)
r.append(list(s))
return r
Run Code Online (Sandbox Code Playgroud)
这实际上是在SO上的一个职位发布,并且是一个新手我觉得它很有趣.所以你得到如下输出:
partition(5, L)
(1, 2, 3, 4, None)
Out[86]: [[1, 2, 3, 4]]
Run Code Online (Sandbox Code Playgroud)
对我来说,这已经令人困惑,因为我认为izip_longest(*([iter(iterable)] * n))会izip_longest在n个相同迭代器的列表上运行该函数,所以我首先要预期输出(1,1,1,1,1)然后输出(2,2,2,2,2)等等.
这个问题的简短版本就是这一行:
p = izip_longest(*([iter(iterable)] * n))
Run Code Online (Sandbox Code Playgroud)
解析它我会想[iter(iterable)]*n创建一个长度为n的相同iterables的列表,它们都指向同一个东西 - 这就是它在命令行上的作用,但这似乎不是它的作用这里基于上面印刷的输出.
另外我认为开头的*...longest(*...是因为列表的长度未知,但我认为这完全没有意义.*函数调用中的第一个符号是什么?似乎它不是简单地指出一个未知长度的参数列表......
所以在一天结束的时候,我完全迷失了.有人可以告诉我这个语法吗?
非常感谢任何输入!
感谢所有有用的答案,每个人.我不确定我是否正在寻找答案或问题,但在我看来,这个列表理解将对列表和元组做同样的事情(我意识到迭代器也适用于字典,自定义类,其他东西.. .)
[L[i*n:(i+1)*n] for i in range(int(ceil(len(L)/float(n)))) ]
Run Code Online (Sandbox Code Playgroud) 我尝试使用以下命令一次迭代 3 个元素(这似乎有效):
for a, b, c in zip(*[iter(accounts_iter)]*3):
print(a)
print(b)
print(c)
Run Code Online (Sandbox Code Playgroud)
accounts_iter是我创建的元组列表。iter(accounts_iter)解压accounts_iter成一个列表迭代器,所以它仍然是一个元组列表,只是它现在是可迭代的这是我很难理解的地方。
*[iter(accounts_iter)]将列表解压Step 2成单独的元组,因此不再是元组列表,而是单个元组*[iter(accounts_iter)]*3乘以 3在我的输出中,我似乎没有重复项,但确实能够每个循环处理 3 个项目。
但是一旦发生,我不会拥有同一个元组的 3 个副本吗zip(*[iter(accounts_iter)]*3)?
如何从可迭代对象一次生成多个项目?
例如,对于任意长度的序列,如何在每次迭代的X个连续项的组中迭代序列中的项?
如何在列表中添加两个连续的数字.
l = [1,2,3,4,5,6,7,8,9]
Run Code Online (Sandbox Code Playgroud)
结果= [3,7,11,15,9]
l = [1,2,3,4,5,6,7,8,9,10]
Run Code Online (Sandbox Code Playgroud)
结果= [3,7,11,15,19]
我可以使用简单的for循环轻松实现它.但是我如何使用更多的pythonic方式实现它.
我需要反转一个交错的字符串,意味着我有2对,应该像这样搞砸了:
>>> interleaved = "123456"
Run Code Online (Sandbox Code Playgroud)
倒车
>>> print interleaved[::-1]
654321
Run Code Online (Sandbox Code Playgroud)
但我真正想要的是
563412
Run Code Online (Sandbox Code Playgroud)
这有一个字符串切片操作?
运行
L = [1,2,3,4,5,6]
print zip(L,L[1:])[::2]
Run Code Online (Sandbox Code Playgroud)
[(1, 2), (3, 4), (5, 6)]
Run Code Online (Sandbox Code Playgroud)
相反,zip(或其他)语句会产生什么
[1, 2, None, 3, 4, None, 5, 6, None]
Run Code Online (Sandbox Code Playgroud)
?
更新
一开始就没关系
L = [(1,2),(3,4),(5,6)]
Run Code Online (Sandbox Code Playgroud)
只要声明仍然是(快速)单行.
UPDATE2
插入None的一个用例是快速绘制段.
我只是使用python从列表中提取了一些数据,但认为它过于复杂和unpythonic,并且可能有更好的方法来做到这一点.我其实很确定我在标准库文档中看到了这个,但我的大脑拒绝告诉我在哪里.
所以这里:
输入:
x = range(8) # any even sequence
Run Code Online (Sandbox Code Playgroud)
输出:
[[0, 1], [2, 3], [4, 5], [6, 7]]
Run Code Online (Sandbox Code Playgroud)
我的看法:
[ [x[i], x[i+1]] for i in range(len(x))[::2] ]
Run Code Online (Sandbox Code Playgroud) 我有一份清单
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Run Code Online (Sandbox Code Playgroud)
是否有任何优雅的方式使它们成对工作?我的预期是
[(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]
Run Code Online (Sandbox Code Playgroud) 我列出了类似于mylist = [1,2,3,4,5,6]现在的东西我需要遍历此列表并创建3个这样的新列表
new1 = [1,4]
new2 = [2,5]
new3 = [3,6]
Run Code Online (Sandbox Code Playgroud)
最简单的方法是什么?
我正在创建一个python程序.
我有一个清单:
[3, 28, 25, 126, 25, 127]
如何将其转换为元组列表,以便列表变为:
[(3,28),(25,126),(25,127)]
它加入了2个元素并构成了一个元组.
python ×10
iterator ×3
list ×3
python-2.7 ×2
grouping ×1
loops ×1
performance ×1
python-3.x ×1
slice ×1
string ×1
yield ×1