公众号里的文章大多数需要编程基础,如果因为代码看不懂,而跟不上正文的节奏,可以来找我学习,相当于给自己一个新手保护期。我的课程都是循环开课。下一期的时间,点进去咨询微信↓ 生信分析直播课程(2024.9.2下一期) 生信新手保护学习小组(预计8.23下一期) 单细胞陪伴学习小组(预计8.29下一期)
小豆花老师有日子没出镜了,浅浅出现一下。再有半个月他就满两岁了,朋友圈的朋友们经常发出的反馈就是:”都这么大啦“!不大不大,也就三十来斤现在还不能当助教。
但是,在他的帮助下,小洁老师原本3天可以搞定的python学习,只花了7天就搞定啦!曾老板说了,他是头等功。
1.认知2.列表的推导式练习:列表推导式3.字典的推导式练习:字典推导式4.map--for循环的替代方案之一练习:map函数
1.认知
推导式是循环计算,可以把for循环的结果存下来。
2.列表的推导式
根据现有的列表循环计算,生成一个新的列表。
虽然这也可以使用
for
循环来实现,但列表推导完成相同的任务所需的代码行数更少。这段代码是计算data列表里的每个元素的平方,赋值给新的列表。
data = [1, 2, 3, 4, 5]
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**2) for (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)))