朝闻道

作者: ChronosAeon | 来源:发表于2018-03-28 09:36 被阅读0次

将两个嵌套for循环写成一个列表生成式
如,有一个嵌套列表,a=[[1,2],[3,4],[5,6]],要提取列表里的每一个元素

用for循环处理:

for i in a:  
    for j in i:  
        print(j)  
b=[j for i in a for j in i]#注意两个for的顺序  
print(b)
>>> b  
[1, 2, 3, 4, 5, 6]  

然后在看下面这一段来自流畅的python的代码:

import collections
Card = collections.namedtuple('Card', ['rank', 'suit'])
class FrenchDeck:
    ranks = [str(n) for n in range(2, 11)] + list('JQKA')
    suits = 'spades diamonds clubs hearts'.split()
    def __init__(self):
        self._cards = [Card(rank, suit) for suit in self.suits
                                for rank in self.ranks]
    def __len__(self):
        return len(self._cards)
    def __getitem__(self, position):
        return self._cards[position]
>>> beer_card = Card('7', 'diamonds')
>>> beer_card
Card(rank='7', suit='diamonds')

里面生成构造函数生成self._cards时候巧妙使用列表生成器,并且重写了这个类的len方法,和getitem方法.

要是想完成随机抽牌的功能,这里就不用重复造轮子了,random模块给了我们choice方法。

card = FrenchDeck()
print(choice(card))

但是笔者在这里有一个疑问,为什么choice可以对类使用,如果类里面有多个数组那随机的是那一个呢?
于是我做了一个实验

    def __getitem__(self, position):
        print('getitem called')
        return self._cards[position]

不出所料,其实choice方法就是给这个函数的position形式参数传递了一个随机数获得返回值。

相关文章

  • 游闻道园的遐想/《灰色年代》作者:邵明

    ——闻道、“朝闻道,夕死可矣” 闻道园的闻道两字岀处,是《论语·里仁》中的句子——“朝闻道,夕死可矣”。“朝闻道,...

  • 《论语》里仁篇8/26

    2021.10.19 子曰:“朝闻道,夕死可矣。” 子曰:“朝闻道,夕死可矣。” 子曰:“朝闻道,夕死可矣。” 子...

  • 朝闻道

    所有的历史都不客观。

  • 朝闻道

    (庆祝纺大60周年校庆) --诗人安东尼金 一朝闻道 吾辈之人上下求索 静谧的夜 手捧书卷 ...

  • 《朝闻道》

    书名:《朝闻道》 作者:刘慈欣 类型:科幻小说 首版时间:2014年 字数:15000 开始阅读时间:2018.6...

  • 朝闻道

    将两个嵌套for循环写成一个列表生成式如,有一个嵌套列表,a=[[1,2],[3,4],[5,6]],要提取列表里...

  • 《朝闻道》

    “飞蛾并不觉得阴暗,它至少享受了短暂的光明。”

  • 朝闻道

    边玩边体悟。创造者就是自己。

  • 朝闻道

    这个城市的夏天很热。 夏天的热通常有两种。一种是让人汗如雨下,走十分钟就变得和水里捞起来一样的热;一种是让人出不了...

  • 朝闻道

    天性鲁钝的人 朝闻道 夕四国以

网友评论

    本文标题:朝闻道

    本文链接:https://www.haomeiwen.com/subject/tqfycftx.html