由于循环这种东西并不能很好的展现我们高超的编程能力,专门跑去啃一本厚厚的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 这种写法的外边既不是一个列表推导式[方括号括起来],也不是一个字典推导式的{花括号括起来},那他就是一个生成器(圆括号括起来)