05-列表

列表

特点:

1.是有序的
2.可以重复的
3.可变类型

1.创建和删除列表

通过 []创建或者 list()函数转化
list_name=['a', 'b']
list_name = []  # 创建空列表
list_name = list(range(0, 100, 2))  # 通过list函数转化得到列表
del list_name  # 删除列表


2.增加列表元素

2. 1 list.append(x):尾部添加单个元素
ls = []
for each in range(100):
    if each % 2 == 0:
        ls.append(each)


2. 2 list.extend(last_x):尾部添加一个列表所有元素
ls = [1, 2, 3]
ls_extend = [4, 5, 6]
ls.extend(ls_extend)  # 也可以在中间位置插入一个列表的所有元素
ls[1:1] = ls_extend


2. 3 list.insert(index, obj):指定位置插入元素
ls = [1, 2, 4]
ls.insert(1, 88)
print(ls)  # out: 1, 88, 2, 4




3.删除列表元素

3. 1 list.pop([index]):删除指定index元素,默认是最后一个,并返回删除元素

整体返回: 返回pop(),删除的最后一项数据
是否改变原列表: 改变原列表

ls = [1, 2, 3]
ls.pop(1)  # out: 2


3. 2 list.remove(x):删除元素
ls = [1, 2, 3]
del ls[2]  # 删除指定索引列表元素:3
ls.remove(2)  # 移除列表元素:2


3. 3 list.clear():清空列表中的所有元素
ls = [1, 2, 3, 4]
x.clear()  # 清空所有元素


4.修改列表元素

# 通过下标修改
ls = [1, 2, 3]
ls[1] = 88
print(ls)  # out: [1, 88, 3]
# 通过切片修改
ls = [1, 2, 3]
ls[0:2] = ["6", "7"]
print(ls)  # out: [6, 7, 3]


5.查找列表元素

5. 1 直接通过下标查找
ls = [1, 2, 3]
print(ls[0])  # out:1


5. 2 list.index(v [, begin[, end]]):获取指定元素的索引号
ls = [1, 2, 3]
ls.index(2)  # out:1


6.排序、反转和复制

6. 1 list.sort(key=None, reverse=False):排序

key用来指定排序规则。reserve = Flase 升序/正向排序(默认),True降序/反向排序;函数本身不会返回

不传参数就默认排序,可以传入一个函数作为参数,自定义排序规则
整体返回: 返回排序的列表
是否改变原列表: 改变原列表

ls = [1, 3, 8, 2]
ls.sort(key=None, reverse=True)  # out: [8, 3, 2, 1]
'''两者区别:sorted方法不会改变原来list,而是会返回一个新的已经排序好的list'''
ls_1 = [1, 3, 2, 4]
ls_1 = sorted(ls_1, key=None, reverse=True)
print(ls_1)  # out: [4, 3, 2, 1]


6. 2 list.reverse(x):列表元素反转

该方法无须传参数
整体返回: 返回翻转后的列表
是否改变原列表: 改变原列表

ls = [1, 5, 2]
ls.reverse()
print(ls)  # out: [2, 5, 1]


6. 3 list.copy():浅复制列表
ls = [1, 2, 3, 4]  
ls_copy = ls.copy()  
print(ls_copy)  # out: [1, 2, 3, 4]


7.列表操作函数

7. 1 min()、max()、sum()、len():找最小值、最大值、求和(元素为数值型)、长度
ls = [1, 2, 4]
ls_sum = sum(ls)  # 7
ls_min = min(ls)  # 1
ls_max = max(ls)  # 4
ls_len = len(ls)  # 3


7. 2 list.count(x):获取列表中元素出现的次数
ls = [1, 2, 1, 5, 2]
ls.count(2)  # out: 2


7. 3 tuple():将列表转化为元组(元组元素不可变)
ls = [1, 2, 3]
tup = tuple(ls)
print(tup)  # out: (1, 2, 3)


8.列表切片

方法list[ start : end : step ]
start :切片的起始位置
end :是切片的结束位置(不包括)
step :可以不提供,默认值是1,步长值不能为0,不然会报错ValueError。步长是正数,从左往右取;步长是负数,从右往左取。

出现情况:
①list[start : end] 切片是不包含后面那个元素的值(顾头不顾尾)
②list[ : end] 如果切片前面一个值缺省的话,从开头开始取
③list[start : ] 如果切片后面的值缺省的话,取到末尾
④list[ : ] 如果全部缺省,取全部
⑤list[start : end : step]

  • 如果第一个索引是0,还可以省略
ls = [1, 2, 4, 7, 88]
var = ls[:2]
print(var)  # out:[1, 2]
  • 支持负数
ls = [1, 2, 4, 7, 88]
a = ls[-1]  # out: 88
b = ls[:-1]  # out: [1, 2, 4, 7]
c = ls[:-2:]  # out: [1, 2, 4]
d = ls[-2:]  # out: [7, 88]
e = ls[-2:-1]  # out: [7]
f = ls[::-1]  # out:[88, 7, 4, 2, 1]
print(a, b, c, d, e, f) 
  • 拓展:二维列表及其切片
a=[['a', 'b', 'c'], [1, 2, 3]]
a[1][2]  # out: 3


9.列表推导式

[expression for var in list]
a =[1, 3, 5, 6, 9] 
b = [x**2 for x in a]
print(b)  # out: [1, 9, 25, 7, 10]

def f(data):
    return data + 1
b = [f(x) for x in a]  # 使用自定义函数
print(b)  # out: [2, 4, 6, 7, 10]
[expression for var in list if condition]
a =[1, 3, 5, 6, 9] 
b = [x**2 for x in a if x > 3]
[expression if condition else expression for var in list]
a =[1, 3, 5, 6, 9]
b = ['奇数' if x%2 != 0 else '偶数' for x in a]
[x for a in b for x in a]:二维列表推导式应用
'''对列表中元素为列表的所有子元素求和'''
l = [[1, 2], 1, [1, 2, 3], 4, [6, 7]]
s = sum([x for y in l if isinstance(y, list) for x in y])

'''我们把列表推导式展开,这样获取变得好结构清楚些'''
def list_expend():
    ls = []
    for y in l:
        if isinstance(y, list):
            for x in y:
                ls.append(x)
    return ls


10.列表拆包

某些情况下,我们可能需要取列表中的几个值,这样我们可以使用了列表切片来逐一赋值,此外我们还可以使用‘*’列表拆包一步到位。

prop = ['张三', '男', '70kg', 18, '178cm']
'''我们获取列表中的姓名和性别元素'''
name,sex = prop
print(name,sex)  # out: ('张三', '男')
'''姓名,年龄,身高'''
name,age,height = prop
print(name,age,height)  # out: ('张三', 18, '178cm')
'''成绩:去除最大值最小值='''
grade = [80, 75, 23, 100, 85]
grade_valid = sorted(grade) 
print(grade_valid)  # out: [75, 80, 85]


11.slice()截取方法

通过slice(start, end)(在原有列表中窃取新列表)生成可切片对象,赋值给变量,很多时候往往使得代码可读性更好

start : 截取列表开始的下标;
end: 截取列表结束时的下标,窃取的列表不包含这个下标对应的内容;若end参数省略,将截取从start开始的剩余所有内容。

整体返回:返回截取后的新列表
是否改变原列表:不改变原列表

dt = '20190714'
year = slice(0, 4)  # 生成切片对象slice
print(dt[year])  # '2019'
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 229,565评论 6 539
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,115评论 3 423
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 177,577评论 0 382
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,514评论 1 316
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,234评论 6 410
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 55,621评论 1 326
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 43,641评论 3 444
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,822评论 0 289
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,380评论 1 335
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,128评论 3 356
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,319评论 1 371
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,879评论 5 362
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,548评论 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,970评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,229评论 1 291
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,048评论 3 397
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,285评论 2 376