CRA*_*OLO -2 python line python-2.7
我打算在这里问这个问题.但是在我做之前我就解决了.我希望能够以更有序的方式打印这个Python 2.7列表.
not_shuffled_deck = ["%i of %s" % (i, s) for i in range(2,10) for s in ('spades', 'diamonds', 'clubs', 'hearts')]
for i in not_shuffled_deck:
print i + "|",
Run Code Online (Sandbox Code Playgroud)
这就是它最初的结果.
嗯,它实际上比它在这里显示的更糟糕.它取决于控制台大小,屏幕大小,是否有文本换行等.所以在我使用的控制台中,甚至在普通的文本编辑器中,它将以难以阅读的方式显示在多行上.
2 of spades| 2 of diamonds| 2 of clubs| 2 of hearts| 3 of spades| 3 of diamonds| 3 of clubs| 3 of hearts| 4 of spades| 4 of diamonds| 4 of clubs| 4 of hearts| 5 of spades| 5 of diamonds| 5 of clubs| 5 of hearts| 6 of spades| 6 of diamonds| 6 of clubs| 6 of hearts| 7 of spades| 7 of diamonds| 7 of clubs| 7 of hearts| 8 of spades| 8 of diamonds| 8 of clubs| 8 of hearts| 9 of spades| 9 of diamonds| 9 of clubs| 9 of hearts|
Run Code Online (Sandbox Code Playgroud)
所以我想要一种方法来在一条线上印刷四个2,然后是3个等等.每个之间都有一个空格.
对字符串中的第一项进行分组:
from itertools import groupby
for _, group in groupby(not_shuffled_deck, lambda c: c.split()[0]):
print '| '.join(group)
print
Run Code Online (Sandbox Code Playgroud)
演示:
>>> from itertools import groupby
>>> not_shuffled_deck = ["%i of %s" % (i, s) for i in range(2,10) for s in ('spades', 'diamonds', 'clubs', 'hearts')]
>>> for _, group in groupby(not_shuffled_deck, lambda c: c.split()[0]):
... print '| '.join(group)
... print
...
2 of spades| 2 of diamonds| 2 of clubs| 2 of hearts
3 of spades| 3 of diamonds| 3 of clubs| 3 of hearts
4 of spades| 4 of diamonds| 4 of clubs| 4 of hearts
5 of spades| 5 of diamonds| 5 of clubs| 5 of hearts
6 of spades| 6 of diamonds| 6 of clubs| 6 of hearts
7 of spades| 7 of diamonds| 7 of clubs| 7 of hearts
8 of spades| 8 of diamonds| 8 of clubs| 8 of hearts
9 of spades| 9 of diamonds| 9 of clubs| 9 of hearts
Run Code Online (Sandbox Code Playgroud)
您询问:
你能否给我一个关于公式如何运作的外行解释?
这一切围绕着这个lambda功能; groupby()从每个值中获取not_shuffled_deck并仅查看该函数的输出.c.split()在空格上拆分卡片串,只返回第一个元素,'2'或者'3'等等.
那么groupby就产生第一个角色相等的群体; 列表中的第一个元素,第二个元素,第三个元素和第四个元素都是'2'其字符串中的第一个元素._将被设置为'2'(但我在这里忽略它),group是一个可迭代产生这4个元素; 我们传递该值以'| '.join()创建要打印的新字符串.
我总是将迭代画作为斗旅; 一排排人员从河流或水井或水泵中流过一桶水.无论铲斗来自何处,您都不知道还有多少挡不到,但您所能做的就是采取下一个铲斗.groupby就像有人组织新的迷你斗旅,为你提供它所处理的一些水桶.
因此,您要求groupby根据用水捕获的鱼数来分组水桶.他会首先给你一个人说:我只给你两桶鱼.你不断要求水桶,而且在某些时候,那个人说:不管,没有水桶,我已经没有你了.然后你回到groupby仲裁者那里,他说,这里是一个新人,他只会用4条鱼来传递水桶.然后你和那个4个鱼缸的家伙聊了一会儿.
在我的回答中,not_shuffled_deck是井(它在某些时候会用完水),groupby不计算鱼类,但只看到绳子的第一部分,并且group是给你桶的人都有相同的第一部分的字符串.
因为这是一个斗式旅,groupby不知道接下来会发生什么,所以如果有一堆有2条鱼的水桶,那么接下来是一堆3条鱼,然后另一条只有2条鱼,你会得到3个不同的人交给你3组不同的水桶.当的结果,形成基团key(的第二个参数groupby)变化从水桶到桶中.此外,如果你不从该group人那里拿走所有水桶,那么groupby就会扔掉水桶.将它们倒在地上.
如果你正在服用2-fish鱼群,但是又回到groupby仲裁者那里要求新的团体人,那么仲裁者会扔掉所有桶中的2条鱼,直到它找到一个具有不同数量的鱼的桶.给你一个新人交谈.然后你不能回到2-fish团体的人并要求更多的桶,现在这些桶已经在街上被清空了.
| 归档时间: |
|
| 查看次数: |
1959 次 |
| 最近记录: |