循环的高级写法

由于循环这种东西并不能很好的展现我们高超的编程能力,专门跑去啃一本厚厚的python书用来装逼花费的事件又太多了,于是便有了这边总结python循环高级写法的文章(不是)

  • 如何将列表里的字典的某一项打印出来:
>>> df['relationships.biomes.data'][0]
[{'type': 'biomes', 'id': 'root:Environmental:Aquatic:Marine:Oceanic', 'links': {'self': 'https://www.ebi.ac.uk/metagenomics/api/v1/biomes/root:Environmental:Aquatic:Marine:Oceanic'}}]

我想将其id 打印出来

print(x['id'] for x in df['relationships.biomes.data'][0])

但是输出

<generator object <genexpr> at 0x0E232730>

但是创建list 对象便可

print([x['id'] for x in df['relationships.biomes.data'][0]])
Out:['root:Environmental:Aquatic:Marine:Oceanic']

总结来讲 如果是x for x in y 这种写法的外面既不是一个列表推导式([]),也不是一个字典推导式({}),他就应该是一个生成器(());

  • 列表生成式和[] 之间不得不说的秘密
    请观察如下代码:
class WAM:
    def __init__(self,chunk_size=11,arr_length=2,init_count=0.5):
        self.chunksize=chunk_size;
        self.arr_length = arr_length;
        #初始化 不考虑阶数的 weight_matrix/possibility_matrix
        self.ord_weights=pd.DataFrame(np.full((arr_length-1,4),init_count),columns=['a','c','g','t']);
        #初始化 考虑阶数 的 weight_martix/possibility_matrix
        self.init_martix=pd.DataFrame(np.full((chunk_size,4**arr_length),init_count),columns=self.arr_length_name(arr_length));
    def arr_length_name(arr_length):
        bases=['a','c','g','t'];
        columns_name=reduce(lambda x,y: i+j for i in x for j in y ,[bases]*arr_length);
model_test=WAM(arr_length=3);
print(model_test.ord_weights);    

其输出结果如下:

  File "<ipython-input-11-f756f658c488>", line 11
    columns_name=reduce(lambda x,y: i+j for i in x for j in y ,[bases]*arr_length);
                       ^
SyntaxError: Generator expression must be parenthesized if not sole argument

这是为什么呢,如果一个 x for x in y 这种写法的外边既不是一个列表推导式[方括号括起来],也不是一个字典推导式的{花括号括起来},那他就是一个生成器(圆括号括起来)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容