Python-数据类型:列表

0 前言

>>返回Python系列文章目录<<

1 列表的重要特新

  1. 列表是可变数据,列表的方法/切片会直接修改列表的数据对象,无需另外赋值
x = [1]
x.append(2)
# x=[1, 2],修改了x的数据对象
  1. =两端的列表指向同一个数据对象,并没有新建数据
x = [1]
y = x
print(x is y)  # True,是同一个数据对象,不单单是值相同

x.append(2)
print(y)  # y=[1, 2]  # 方法和切片是修改
  1. 列表的算数运算会新建数据对象
x = [1]
y = x
x = x + [2]
print(y)  # y=[1]

1.1 创建列表

x1 = []  # 空列表
x2 = list()  # 空列表
x3 = [10, 20, 'abc', True]
x4 = list('abcde')   # x4=['a', 'b', 'c', 'd']
x5 = list(range(10)) # x5=[0,1,2,3,4,5,6,7,8,9]
x6 = [range(10)]     # x6=[0,1,2,3,4,5,6,7,8,9]
x7 = [1] * 3  # [1, 1, 1] 重复元素的n维列表

1.2 列表与其他数据类型转化

字符串转化为列表

x = list('ab cde')  # x=['a', 'b', ' ', 'c', 'd', 'e']
x = ('ab cde').split()  # x=['ab', 'cde']

列表转化为字符串

x = ['a', 'b', ' ', 'c', 'd', 'e']
s = ''.join(x)
# s = 'ab cde'

迭代器转化为列表

x = list(range(10))
x = [range(10)]
# x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

1.3 列表解包

接受解包的变量数必须和列表元素数量相同

x = [10, 20, 30]
a, b, c = x
print a, b, c  # 10, 20 ,30

1.4 列表切片

x = [0, 1, 2, 3, 4]
x = x[1:4]
print(x)  # x=[1, 2, 3]

1.5 列表加法

列表+运算两端必须都是列表

x = [0]
x = x + [1]
print(x)  # [0, 1]

2 列表的方法

列表是可变序列,体现为列表的方法会修改列表自身,不是必须使用=赋值给新变量

如果使用=赋值给新变量,本质是改变原列表后,又将改变后的原列表赋值给新变量


  • 改变自身的方法
self=List类说明
self.append(elem)向列表末尾追加单个元素
self.extend(newlist)向列表末尾追加列表
self.clear()清空列表
self.insert(index, elem)在指定位置插入元素
self.remove(elem)删除第一次出现的元素
self.pop(index)
self.pop()
弹出指定下标的元素,缺省时弹出最后一个
self.reverse()列表的反转,改变原列表的先后顺序
self.sort(reverse=False)将列表中的元素进行排序
默认False按升序排列

  • 不改变自身的方法
self=List类说明
self[start:end:step] -> list
self[start:end:step] = list
列表的切片的可以读取或赋值
列表的切片不改变自身
self.index(elem) -> index
self.index(elem) -> Exception
返回元素在列表中第一次出现的下标
没有则报ValueError
self.count(elem) -> num返回元素在字符串中出现次数
len(self) -> num列表元素数量
max(self) -> num列表最大元素
min(self) -> num列表最小元素
sum(self) -> num列表元素和

2.1 增加列表元素操作 append extend insert

  1. append在末尾添加元素,对列表的修改直接反映在原数据上,没有返回值
x = [10, 20]
y = x.append('*') # 元素添加到x尾部
>>>x = [10, 20, '*']
>>>y = None

  1. extend在末尾添加另一个列表中的所有元素,对列表的修改直接反映在原数据上,没有返回值
x = [10, 20]
b = [30, 40]
x.extend(b)   # x=[10, 20, 30, 40]

  1. insert在指定位置添加元素,对列表的修改直接反映在原数据上,没有返回值
x = [10, 20, 30]
x.insert(2, 25)     # 在index=2处插入值25, x=[10, 20, 25, 30]

2.2 删除列表元素操作 remove pop clear

列表删除都是在原变量直接修改,不需要新变量接收结果

x = [10, 20, 30]
x.remove(20)       # 删除x中首个元素20
print('x1 = ', x)

x = [10, 20, 30]
x.pop(1)    #删除 index=1 处的元素,可用列表多选
print('x2 = ', x)

x.clear()     #删除所有元素,变为空列表
print('x3 = ', x)
>>>x1 = [10, 30]
>>>x2 = [10, 30]
>>>x3 = []

2.3 列表元素访问 index count len

x = [10, 20 ,30]
y1 = x.index(20)     #返回第一个元素20的index
y2 = x.count(20)     #返回元素20的个数
y3 = len(x)          #返回x的长度
y4 = max(x)          #返回最大元素
y5 = min(x)          #返回最小元素
y6 = sum(x)          #返回元素和

2.4 列表排列 sort reverse [::-1]

升序/降序

x = [20, 10, 30, 40]
x.sort()
print('x1 = ', x)
x.sort(reverse=True)
print('x2 = ', x)
x = [20, 10, 30, 40]
x3 = x[::-1]
print('x3 = ', x3)
>>>x1 = [10, 20, 30, 40]
>>>x2 = [40, 30, 20, 10]
>>>x3 = [40, 30, 10, 20]

3 对单个表格元素进行快速操作

3.1 单个元素操作

对表格每个元素+1

a = [1, 2, 3]
b = [elem+1 for elem in a]
print(b)

结果:
b = [2, 3, 4]

使用map()函数和匿名函数

a = [1, 2, 3]
b = map(lambda x:x+1, a)
print(b)

结果:
b = [2, 3, 4]

使用map()函数和复杂函数

def add(x):
    retrun x+1
    
a = [1, 2, 3]
b = map(add, a)
print(b)

结果:
b = [2, 3, 4]

3.2 相邻元素操作

计算相邻元素差分,[0]位不变

a = [1, 3, 5]
b = [a[0]] + [a[i+1]-a[i] for i in range(len(a)-1)
print(b)

结果:
b = [1, 2, 2]

3.3 元素累计操作

计算当前元素及之前所有元素和

a = [1, 3, 5]
b = [sum(a[:i+1]) for i in range(len(a))]
print(b)

结果:
b = [1, 4, 9]

4 对多个表格元素进行快速操作

4.1 两个表格对位相加

zip()将两个表格的对应元素合并为元组

x = ['a', 'b', 'c']
y = ['1', '2', '3']
z = [elem[0]+elem[1] for elem in zip(x,y)]
print(z)

结果:
z = ['a1', 'b2', 'c3']

4.2 筛选在表格2中出现的表格1元素

x = ['a', 'b', 'c']
y = ['b', 'c', 'd']
z = [elem for elem in x if(elem in y)]
print(z)

结果:
z = ['b', 'c']

5 二维列表处理

对excel进行复杂处理时,先将表格转为二维列表,然后进行处理

5.1 对表格除表头外进行排序

a = [['数学', '语文'], [12, 34], [23, 56], [47, 12], [23, 90]]
a = a[0] + sorted(a[1:], key=lambda x:(x[1],x[0]))
print(a)
>>>['数学', '语文', [47, 12], [12, 34], [23, 56], [23, 90]]

5.2 表格按指定顺序排序

a = [['数学', '语文'], [12, 34], [23, 56], [47, 12], [23, 90], [72, 12]]
b = [56, 34, 90, 12]
c = a[0] + sorted(a[1:], key=lambda x:(b.index(x[1]), x[0]))
print(c)
>>>['数学', '语文', [23, 56], [12, 34], [23, 90], [47, 12], [72, 12]]

5.3 删除有空单元格的行

a=[['数学', '语文'], [12, 34], [23, ''], [47, 12], [23, 90]]
b = filter(lambda x: '' not in x, a)
print(list(b))
>>>[['数学', '语文'], [12, 34], [47, 12], [23, 90]]
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值