《利用Python进行数据分析2》—4

字典

  • 字典中的值是任意的对象
  • 字典中的键必须是不可变的对象,例如int、float、string、tuple等。不可变就是可哈希的,用hash()函数进行检查。
  • 列表要当做键可以先转成元组,list--->tuple
words = ["apple", "book", "autumn", "bag", "cook", "car", "dog", "as"]
dict2 = {}

for word in words:
    letter = word[0]
    dict2.setdefault(letter, []).append(word)   # 首字母不在,则更新字典中的键值对

setdefault:表示letter不在dict2中,返回空列表,再进行追加操作。

  • 通过collections模块来实现功能
from collections import defaultdict

words = ["apple", "book", "autumn", "bag", "cook", "car", "dog", "as"]
dict3 = defaultdict(list)
for word in words:
    dict3[word[0]].append(word)
dict3

# 结果
defaultdict(list,
            {'a': ['apple', 'autumn', 'as'],
             'b': ['book', 'bag'],
             'c': ['cook', 'car'],
             'd': ['dog']})

集合set

  • 用{}表示,和字典一样,只有键没有值{"book", "name", "shenzhen"}
  • 无序,不可重复,里面的元素不可变
  • 用set()函数或者{}进行创建,创建的过程中自动去重
  • 元素是不可变的,可以先转成元组再获取

操作方法

  • 并集union:a.union(b),|
  • 交集intersection:a.intersection(b),&
image.png

列表解析式

从一个元素过滤,形成列表,在传递参数的过程中还可以修改元素。

语句:[expr for val in collection if condition]

# 等价于
result = []
for val in collection:
    if condition:
    result.append(expr)

题目:将列表中的字符串长度小于3的全部改成大写

list1 = ["book", "car", "as", "go", "beautiful", "believe"]
[x.upper() for x in list1 if len(x) >3]  #  将列表中的字符串中的长度大于2的转成全部大写

['BOOK', 'BEAUTIFUL', 'BELIEVE']

等价于:

list2 = []
for x in list1:
    if len(x) > 3:
        list2.append(x.upper())
    else:
        pass
  • 字典和集合也是用类似于列表的推导式
set1 = {"book", "car", "python", "as"}
{len(x) for x in set1}

# 结果
{2, 3, 4, 6}

# 使用map函数
set(map(len, set1))   # map函数接受的参数:第一个是功能函数,第二个序列,最后用set()方法显式出来,也可以用list显式成列表形式
image.png

字典推导式

  • 注意val:index的写法,就是表达式
  • enumerate()函数同时获取序列中的索引和元素
dict4 = {val: index for index, val in enumerate(list1)}   

嵌套列表推导式

嵌套列表推导式:输出一个嵌套列表中的名字中含有两个e的名字

  • 用for循环解决
data = [['John', 'Emily', 'Michael', 'Mary', 'Steven'],
        ['Maria', 'Juan', 'Javier', 'Natalia', 'Pilar']]

names_list = []
for names in data:
    name_e = [name for name in names if name.count("e") >= 2 ]
    names_list.extend(name_e)
>>name_list

['Steven']
  • 套列表推导式:条件是从大到小的写出来,先取出字典中的列表,再取出列表中的元素;过滤条件放在最后
>>result = [name for names in data for name in names if name.count("e") >= 2]
>>result

['Steven']

将一个整数元组的列表扁平化成一个整数列表

  • 通过两个for推导式解决,大范围在前
  • for表达式的顺序和嵌套顺序是相同的
tuples = [(1,2,3), (5,6), (7,8,9,10)]
list1 = [x for tup in tuples for x in tup]
list1

[1, 2, 3, 5, 6, 7, 8, 9, 10]
  • 嵌套可以是任意的;多层嵌套需要考虑代码可读性
  • 注意判断列表推导式的语法不通对结果的影响
>>tuples = [(1,2,3), (5,6), (7,8,9,10)]
>>list2 = [[x for x in tup] for tup in tuples]  
>>list2

[[1, 2, 3], [5, 6], [7, 8, 9, 10]]

函数

函数是Python中最重要的代码组织和复用手段。几个特征描述如下,具体内容可以参考Python札记17_初识函数function

  • 关键字def进行声明;return进行返回
  • 可以拥有多条return;如果到达函数末尾的时候没有遇到return语句,返回的是None
  • 函数有位置参数关键字参数
  • 关键字参数必须位于位置参数之后
  • 关键字参数通常用于指定默认值和可选参数
def func(x, y, z=2):   # x、y是位置参数;其中z是关键字参数
    if z > 1:
        return z * (x + y)
    else:
        return z * (x - y)
# 不同的参数指定方式
func(1, 2, z=2)
func(1, 2, 3)
func(1, 2)
func(x=4, y=6, z=8)   # 可读性高

命名空间、作用域和局部函数

两种变量:全局变量global和局部变量localPython中有一种更科学地描述变量作用域的名称,叫做命名空间

  • 任何在函数中赋值的变量,默认都是被分配到局部命名空间。
  • 局部命名空间是函数被调用时候创建的,函数参数会立即填入该空间中
  • 函数执行完毕,局部命名空间立即销毁
  • 在函数中对全局变量进行操作,必须先用global对变量进行声明。
# 函数执行完毕,局部命名空间会被销毁(除了闭包的情况)
def func():
    a = []
    for i in range(5):
        a.append(i)
        return a   # 第一次循环碰到return直接结束整个函数,返回[0]

b = func()
b   # [0]
def func():
    a = []
    for i in range(5):
        a.append(i)
    return a   # 循环5次之后再遇到return

b = func()
b

[0, 1, 2, 3, 4]

返回多个值

在Python中可以同时返回多个值,一般是元组的形式

def func():
    a = 5
    b = 6
    c = 7
    return a, b, c  # 返回的是元组形式

a, b, c = func()  # 将返回值分别给前面的3个变量
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,881评论 4 368
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,052评论 1 301
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,598评论 0 250
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,407评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,823评论 3 294
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,872评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,037评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,778评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,505评论 1 247
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,745评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,233评论 1 264
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,568评论 3 260
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,231评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,141评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,939评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,954评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,784评论 2 275

推荐阅读更多精彩内容