相关疑难解决方法(0)

这个功能有什么作用?(Python迭代器)

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)

python iterator

5
推荐指数
2
解决办法
157
查看次数

使用 zip、* 和 *3 的组合同时迭代 3 个元素是如何工作的?

我尝试使用以下命令一次迭代 3 个元素(这似乎有效):

for a, b, c in zip(*[iter(accounts_iter)]*3):
    print(a)
    print(b)
    print(c)
Run Code Online (Sandbox Code Playgroud)
  1. accounts_iter是我创建的元组列表。
  2. iter(accounts_iter)解压accounts_iter成一个列表迭代器,所以它仍然是一个元组列表,只是它现在是可迭代的

这是我很难理解的地方。

  • *[iter(accounts_iter)]将列表解压Step 2成单独的元组,因此不再是元组列表,而是单个元组
  • *[iter(accounts_iter)]*3乘以 3

在我的输出中,我似乎没有重复项,但确实能够每个循环处理 3 个项目。

但是一旦发生,我不会拥有同一个元组的 3 个副本吗zip(*[iter(accounts_iter)]*3)

python iterator loops python-3.x

5
推荐指数
0
解决办法
716
查看次数

从可迭代对象一次产生多个对象?

如何从可迭代对象一次生成多个项目?

例如,对于任意长度的序列,如何在每次迭代的X个连续项的组中迭代序列中的项?

python grouping iterator yield

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

在列表中添加两个连续的数字

如何在列表中添加两个连续的数字.

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方式实现它.

python

4
推荐指数
2
解决办法
3646
查看次数

如何通过Python字符串切片反向旋转字符串

我需要反转一个交错的字符串,意味着我有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)

这有一个字符串切片操作?

python string slice

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

如何在列表中插入None?

运行

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 performance list python-2.7

4
推荐指数
3
解决办法
332
查看次数

从列表中获取两元组

我只是使用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)

python

3
推荐指数
1
解决办法
3490
查看次数

是否有任何优雅的方式使列表包含一些整数成为包含一些元组的列表?

我有一份清单

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)

python

3
推荐指数
2
解决办法
115
查看次数

python从一个列表创建几个列表

我列出了类似于mylist = [1,2,3,4,5,6]现在的东西我需要遍历此列表并创建3个这样的新列表

 new1 = [1,4]
 new2 = [2,5]
 new3 = [3,6]
Run Code Online (Sandbox Code Playgroud)

最简单的方法是什么?

python list python-2.7

3
推荐指数
1
解决办法
2046
查看次数

将列表转换为元组python

我正在创建一个python程序.

我有一个清单:

[3, 28, 25, 126, 25, 127]

如何将其转换为元组列表,以便列表变为:

[(3,28),(25,126),(25,127)]

它加入了2个元素并构成了一个元组.

python list

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

标签 统计

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