Python组合数据类型笔记

小白笔记
仅记录常规操作中较为不熟悉的操作类型

1、list(str)/str.split():列表中的元素为字符类型

>>> s='1,3,6,9,2,5,1'
>>> s=list(s)
>>> s

# ['1',',','3',',','6',',','9',',','2',',','5',',','1']

>>> s='1,2,3,4' 
>>> s=s.split(',') 
>>> s 

# ['1','2','3','4']

2、对于数字字符串要转换为列表类型,需要加eval函数,非数字字符串不可用否则会报错

>>> s='1,3,6,9,2,5,1'
>>> s=list(eval(s))
>>> s

# [1, 3, 6, 9, 2, 5, 1]

>>> s='a,b,c'
>>> c=list(eval(s))

Traceback (most recent call last):
  File "<pyshell#13>", line 1, in <module>
    c=list(eval(s))
  File "<string>", line 1, in <module>
NameError: name 'a' is not defined

3、对于列表定义,非数字元素需要加引号,否则会报错

>>> f=[a,b,c]

Traceback (most recent call last):
  File "<pyshell#19>", line 1, in <module>
    f=[a,b,c]
NameError: name 'a' is not defined

>>> f=[1,2,3]
>>> f

# [1, 2, 3]

注:列表类型可以使用 "+" 来为列表增加元素,可见如下杨辉三角的生成器实例:

def triangles():
    L = [1]
    while 1:
        yield L
        L = [0] + L + [0]
        L = [L[i] + L[i + 1] for i in range(len(L) - 1)]

4、关于字典定义,其中非数字元素必须为字符串形式(即:必须有引号),键值都是

>>> d = {china:beijing,usa:newyork}

Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    d = {china:beijing,usa:newyork}
NameError: name 'china' is not defined

>>> d = {'a':2,'b':3}
>>> d

# {'a': 2, 'b': 3}

5、字典中:k in d 仅用于判断某一键 k 是否在字典 d 中

6、ls.remove(x) 将列表ls中出现的第一个元素x删除,不会生产新的列表,是对原列表进行修改

7、d.get(k, <default>) 用来返回字典 d 中的 k 键对应的值,如果不存在 k 键则返回 <default>

8、d.pop(k, <default>)用来删除字典 d 中 k 键及对应的值,如果不存在 k 键则返回 <default>

>>> d = {'中国':'北京','美国':'华盛顿','法国':'巴黎'}
>>> d.get('中国','罗马')

# '北京'

>>> d.get('慕尼黑','罗马')

# '罗马'

>>> d.pop('中国','罗马')

# '北京'

>>> d.pop('慕尼黑','罗马')

# '罗马'

>>> d

# {'美国': '华盛顿', '法国': '巴黎'}

9、列表生成式
列表生成式就是一个用来生成列表的特定语法形式的表达式,它是一种语法糖。

语法糖是指计算机语言中,某些特定功能用一种简洁方便的语法实现,以代替常规语法(比如电话中的快速拨号:用“长按1” 来呼叫特定联系人,以替代拨打完整的电话号码)

基础语法格式

[exp for iter_var in iterable]

工作过程:

迭代iterable中的每个元素; # iterable:迭代对象
每次迭代先把结果赋给iter_var,后通过exp得到一个新值; # exp:表达式
最后把所有通过exp得到的计算值以一个新列表的形式返回。

相当于这样的过程:

L = []
for iter_var in iterable:
    L.append(exp)

实例:生成一个2n+1的数字列表,n为从3到11的数字

list1 = [2*n + 1 for n in range(3, 11)]

带过滤功能语法格式

[exp for iter_var in iterable if_exp]

工作过程:

迭代iterable中的每个元素,每次迭代都先判断if_exp表达式结果为真,如果为真则进行下一步,如果为假则进行下一次迭代;
把迭代结果赋值给iter_var,然后通过exp得到一个新的计算值;
最后把所有通过exp得到的计算值以一个新列表的形式返回。

相当于这样的过程:

L = []
for iter_var in iterable:
    if_exp:
        L.append(exp)

实例:过滤出一个指定的数字列表中值大于20的元素

L = [3, 7, 11, 14,19, 33, 26, 57, 99]
list2 = [x for x in L if x > 20]

循环嵌套语法格式

[exp for iter_var_A in iterable_A for iter_var_B in iterable_B]

工作过程:

每迭代iterable_A中的一个元素,就把ierable_B中的所有元素都迭代一遍。

相当于这样的过程:

L = []
for iter_var_A in iterable_A:
    for iter_var_B in iterable_B:
        L.append(exp)

实例:计算两个集合的全排列,并将结果作为保存至一个新的列表中

L1 = ['香蕉', '苹果', '橙子']
L2 = ['可乐', '牛奶']
list3 = [(x, y) for x in L1 for y in L2]

10、生成器
按照某种算法不断生成新的数据,直到满足某一个指定的条件结束
构造生成器的两种方式:

  • 使用类似列表生成式的方式生成
(2*n + 1 for n in range(3, 11))   # 把列表生成式中的 [] 改为 () 即可
  • 使用包含yield的函数来生成
    实例:
def my_range(start, end):
    for n in range(start, end):
        yield 2*n + 1  # 生成器函数,在执行时遇到yield的时候,函数返回(中断),只有下次调用时才会继续执行后续语句(从上次中断的位置继续)
        print('测试执行过程')

g1 = my_range(3, 6)

利用next() 函数来遍历生成器(可以用for循环遍历)
第一次遍历

print(next(g1))

结果是:

7

第二次遍历

print(next(g1))

结果是:

测试执行过程
9

需要说明的是:如果生成器函数有返回值,要获取该返回值的话,只能通过在一个while循环中不断的next(),最后通过捕获StopIteration异常

参考链接:
https://www.cnblogs.com/yyds/p/6281453.html
https://www.liaoxuefeng.com/wiki/1016959663602400/1017318207388128

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

推荐阅读更多精彩内容