R用户要整点python--推导式

科技   2024-08-20 15:03   山东  
 今天是生信星球陪你的第983天

   
公众号里的文章大多数需要编程基础,如果因为代码看不懂,而跟不上正文的节奏,可以来找我学习,相当于给自己一个新手保护期。我的课程都是循环开课。下一期的时间,点进去咨询微信↓
生信分析直播课程(2024.9.2下一期)
生信新手保护学习小组(预计8.23下一期)
单细胞陪伴学习小组(预计8.29下一期)

小豆花老师有日子没出镜了,浅浅出现一下。再有半个月他就满两岁了,朋友圈的朋友们经常发出的反馈就是:”都这么大啦“!不大不大,也就三十来斤现在还不能当助教。

但是,在他的帮助下,小洁老师原本3天可以搞定的python学习,只花了7天就搞定啦!曾老板说了,他是头等功。

1.认知2.列表的推导式练习:列表推导式3.字典的推导式练习:字典推导式4.map--for循环的替代方案之一练习:map函数

1.认知

推导式是循环计算,可以把for循环的结果存下来。

2.列表的推导式


根据现有的列表循环计算,生成一个新的列表。
虽然这也可以使用 for 循环来实现,但列表推导完成相同的任务所需的代码行数更少。
这段代码是计算data列表里的每个元素的平方,赋值给新的列表。
data = [12345]
new = [x**2 for x in data])

## [1, 4, 9, 16, 25]

自行探索:
python不支持1:100这样的写法,如果要用代码生成,而不是用手动,应该是写:

data = list(range(1,6))
new = [x**2 for x in data]
print(new)
## [1, 4, 9, 16, 25]

还可以拓展到等差数列,类似seq函数

data = list(range(1,6,2))
new = [x**2 for x in data]
print(new)
## [1, 9, 25]

练习:列表推导式

inflam_files是一个文件名列表。
将提供的 for 循环重写为列表推导式:dfs_comp

# Append dataframes into list with for loop
dfs_list = []
for f in inflam_files:
    dat = pd.read_csv(f)
    dfs_list.append(dat)

# Re-write the provided for loop as a list comprehension: dfs_comp
dfs_comp = [____.____(____) for ____ in ____]
print(dfs_comp)

答案

# Append dataframes into list with for loop
dfs_list = []
for f in inflam_files:
    dat = pd.read_csv(f)
    dfs_list.append(dat)

# Re-write the provided for loop as a list comprehension: dfs_comp
dfs_comp = [pd.read_csv(f) for f in inflam_files]
print(dfs_comp)

3.字典的推导式

根据现有的列表或者字典,生成一个新的字典,代码里的x:x**2就是键值对格式,x是键,x**2是值。


字典推导与列表推导非常相似,不同之处是计算结果是字典而不是列表。复习一下,字典中的每个元素都是键值对,冒号前面是键,后面是值。
计算列表中的所有值平方,产生一个新的字典:
x = [['a'1], ['b'2], ['c'3], ['d'4]]
print({key:(value**2for (key, value) in x})

## {'a': 1, 'b': 4, 'c': 9, 'd': 16}

练习:字典推导式

2D 列表twitter_followers的内容如下:

[['sara'458], ['daniel'660], ['hugo'3509], ['datacamp'26400]]

写一个字典推导式,其中键是子列表的第一个元素,值是第二个元素,命名为tf_dict,并输出。

# Write a dict comprehension
tf_dict = {____:____ for ____,____ in ____}

# Print tf_dict
print(____)

答案:

# Write a dict comprehension
tf_dict = {key:value for key,value in twitter_followers}

# Print tf_dict
print(tf_dict)

4.map--for循环的替代方案之一


map的第一个参数是函数名称,第二个参数是列表的变量名。类似R语言里的lapply。
返回的结果是一个map对象,想要查看map的结果,需要用list()转换为列表。
def sq(x):
    return x**2
l = [1,2,3]
# 用for循环
for i in l :
    print(sq(i))
## 1
## 4
## 9
# 列表推导式
[sq(i) for i in l] 
## [1, 4, 9]
# map
map(sq,l)
## <map at 0x19ef3db37c0>
list(map(sq, l))
## [1, 4, 9]

练习:map函数

前面的练习使用了 for 循环来确定 num_drinks 中所有元素的binge status。现在用for循环和自定义函数来完成相同的操作。
1.把 binge_male 函数map到num_drinks列表。
2把 binge_female 函数map到num_drinks列表。

# map the binge_male function to num_drinks
print(list(map(____, ____)))
# map the binge_female function to num_drinks
print(____)

答案

# map the binge_male function to num_drinks
print(list(map(binge_male, num_drinks)))

# map the binge_female function to num_drinks
print(list(map(binge_female,num_drinks)))


生信星球
一个零基础学生信的平台-- 原创结构化图文/教程,精选阶段性资料,带你少走弯路早入门,收获成就感,早成生信小能手~
 最新文章