1. 列表的创建
列表是Python的核心数据类型,可由数值、字符串、布尔值和空值等构成
- 普通列表
a = [1,2,'s',None,True]
print(a,type(a))
[1, 2, 's', None, True] <class 'list'>
- 空
# 空列表
Null = []
Null
[]
# 列表中包含列表,即嵌套列表
a = [1,2,[2,3,4]]
print(a,type(a))
[1, 2, [2, 3, 4]] <class 'list'>
- ranges生成器创建列表
- range(start,end,step)
- start起始数据,end结束数据,step设置步长(非必须参数,默认为1)
- start、end、step数据类型都为int(整型),否则报错
range(1,2,1.1)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-71-8655ac74624c> in <module>()
----> 1 range(1,2,1.1)
TypeError: 'float' object cannot be interpreted as an integer
# 通过range()这个生成器新建一个range对象
r = range(1,9,2)
print(r,type(r))
# 创建的range对象也可以根据索引截取
print(r[:1],type(r[:1]))
# 通过list()函数可将range对象转为列表
lst = list(r)
print(lst,type(lst))
range(1, 9, 2) <class 'range'>
range(1, 3, 2) <class 'range'>
[1, 3, 5, 7] <class 'list'>
r = range(1,9,2)
lst = list(r)
print(lst,type(lst))
[1, 3, 5, 7] <class 'list'>
- 动态列表生成
demo = [i+1 for i in range(10)]
a = [5,2,1]
b = [i+1 for i in a]
2. 列表的增加
- 列表的连接(与字符串连接类似,都是通过+连接)
lst1 = ['a','b']
lst2 = [2]
lst1 + lst2 # 连接在末尾
['a', 'b', 2]
- 指定位置插入元素
# 在第二个位置插入一个元素
demo_list.insert(int(指定位置,如1),value(插入的内容))
- 列表的复制(与字符串复制相同,都是通过*复制)
lst1 * 2
['a', 'b', 'a', 'b']
- 列表的追加
- 在列表末尾添加新的一个对象
- list.append()注意每次只能添加一个元素,一定是在列表末尾添加,该方法无返回值,但是会修改原来的列表。
- 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
- list.extend()注意每次只能添加一个序列,一定是在列表末尾添加,该方法无返回值,但是会修改原来的列表。
- 在列表末尾添加新的一个对象
注意:extend输入的是一个列表,append输入的是单个对象
# append里的参数是一个对象,所以会直接加入列表末尾
lst = [1,2]
lst.append('hello')
lst
[1, 2, 'hello']
# extend里的参数是一个序列,字符串是序列,所以每个字母都会成为单独对象被加入列表
lst = [1,2]
lst.extend('hello')
lst
[1, 2, 'h', 'e', 'l', 'l', 'o']
lst = [2]
lst.append(['a','b'])
lst
[2, ['a', 'b']]
lst = [2]
lst.extend(['a','b'])
lst
[2, 'a', 'b']
3. 列表的删除
- list.remove()方法:移除列表中某个值的第一个匹配项
- del list[ ]语句:删除list的相应索引值。注意这里不需要圆括号!
- list.clear():移除所有元素
- list.pop(索引值):不添加则删除最后一个元素
lst = ['a', 'b', 'c']
lst.remove('a')
lst
['b', 'c']
lst = ['a', 'b', 'c']
del lst[0:2]
lst
['c']
lst = ['a', 'b', 'c']
lst.clear()
lst
[]
lst = ['a', 'b', 'c']
lst.pop(1)
lst
['a', 'c']
4. 列表的修改
列表的可变性,即列表可通过索引修改元素,或者通过增减元素来改变原列表
- 修改元素的值
a = ['a', 'b', [2, 3]]
a[-1][0] = 'change'
a
['a', 'b', ['change', 3]]
5. 列表的查询
实质上与字符串的索引和切片类似
- 列表的索引
|
lst = ['a','b',[2,3],5]
# 通过索引提取出2
print('正序索引结果:',lst[2][0],';逆序索引结果:',lst[-2][-2])
正序索引结果: 2 ;逆序索引结果: 2
- 列表的切片:切片是一个左闭右开区间,即左可取到、右不可取到
# 提取第一个到第三个元素
print(lst[:3])
# 第二个到倒数第二个
print(lst[1:-1]) # 正逆序索引可结合使用
# 还可以通过设置步长进行切片
a = list(range(9))
a[1:6:3]
['a', 'b', [2, 3]]
['b', [2, 3]]
[1, 4]
- 查询某个值第一个匹配项的索引位置(从左到右)
- list.index(值,起始索引,终止索引),返回第一个匹配的索引值
lst = ['a','a',12,3,21,4,2,3]
# 终止索引取不到,如果不存在则会报错
lst.index(3,1,9)
3
6. 列表常用方法
- 查看列表的长度,即列表中有多少个元素
# 嵌套的列表只算一个
lst = ['a','b',[2,3],5]
len(lst)
4
- 纯数值数据列表的计算
- 最大值:max(list)
- 最小值:min(list)
- 总 和:sum(list)
a = list(range(1,9))
print('a的最大值为:{};最小值为:{};总和为:{}'.format(max(a),min(a),sum(a)))
a的最大值为:8;最小值为:1;总和为:36
- 统计某个值出现的次数
lst = ['a','a',12,3,21,4,2,3]
print(type(lst.count('a')),lst.count(12)) # 返回的次数为int型
<class 'int'> 1
- 列表排序
- 列表所有元素反转:
list.reverse()
- 列表内元素排序
- sorted(list,key=None, reverse=False)
- list.sort(key=None, reverse=False)
- key:按照一定的规则进行排序,默认从小到大;reverse:是否反转序列,默认否
- 列表所有元素反转:
lst = [4,23,25,2,34,23,4,2]
lst.reverse()
lst
[2, 4, 23, 34, 2, 25, 23, 4]
lst = [4,23,25,2,34,23,4,2]
lst.sort()
lst
[2, 2, 4, 4, 23, 23, 25, 34]
lst = [4,23,25,2,34,23,4,2]
sorted(lst)
[2, 2, 4, 4, 23, 23, 25, 34]
- 判断元素是否在列表中
lst = ['a', 'b', 'c']
print('a' in lst) # 在
print('d' not in lst) # 不在
True
True
7. 列表的简单应用
将8个苹果,随机放入3个篮子中
import random
# 8个苹果分别标记
apples = ['a','b','c','d','e','f','g','h']
# 定义需要放入的篮子
lanzi = [[],[],[]]
# 随机放入篮子
for i in apples:
# 随机放入哪一个篮子,用下标索引来模拟放入
c = random.randint(0,2) # 左闭右闭
lanzi[c].append(i)
i = 0
for j in lanzi:
print('lanzi%d的苹果有%d个'%(i,len(j)))
i += 1
for apple in j:
print('%s'%apple,end='\t')
print('\n')
print('-*-'*10)
lanzi0的苹果有3个
a f h
-*--*--*--*--*--*--*--*--*--*-
lanzi1的苹果有1个
b
-*--*--*--*--*--*--*--*--*--*-
lanzi2的苹果有4个
c d e g
-*--*--*--*--*--*--*--*--*--*-
|
products = [["iphone" ,6888],["MacPro",14800],
["小米6",24991],["Coffee",31],
["Book", 60],["Nike",699]]
print('- '*5,'商品列表','- '*5)
num = 0
for i in products:
print('%d %s %d'%(num,i[0],i[1]))
num += 1
- - - - - 商品列表 - - - - -
0 iphone 6888
1 MacPro 14800
2 小米6 24991
3 Coffee 31
4 Book 60
5 Nike 699
print('根据商品编号,添加购物车')
is_q = input('输入q退出,输入其它继续')
a = []
while is_q != 'q':
i = eval(input('请输入商品编号'))
a.append([i,products[i][0],products[i][1]])
is_q = input('输入q退出')
print('- '*5,'商品列表','- '*5)
pay_all = []
for i in a:
print('%d %s %d'%(i[0],i[1],i[2]))
pay_all.append(int(i[2]))
print('您一共消费%d元'%sum(pay_all))
根据商品编号,添加购物车
输入q退出,输入其它继续s
请输入商品编号2
输入q退出s
请输入商品编号1
输入q退出q
- - - - - 商品列表 - - - - -
2 小米6 24991
1 MacPro 14800
您一共消费39791元