列表元组字典集合的用法

列表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
tobaccos = [
'黄鹤楼(软珍品)', '中南海(硬酷爽风尚)', '双喜(软经典)',
'中南海(典8)', '蒙特二号10支装', '红双喜大喜',
'高希霸世纪二25支装', '长白山(777)', '黄金叶(乐途)',
'中南海(京韵细支烤烟)', '钻石(经典纯和)', '钻石(细支尚风)',
'中南海(典5)', '黄鹤楼(硬15细支)', '黄鹤楼(硬圣火)',
'双喜(国喜细支)', '钻石(硬蓝)', '钻石(一品荷花)',
'双喜(大国喜)', '钻石(细支荷花)', '云烟(清甜香)',
'黄鹤楼(软蓝)', '利群(休闲云端)'
]

# 查
# 列表索引从0开始,程序员都知道
print(tobaccos[0])
print(tobaccos[1])
# 从索引0开始的5-0=5个,不是指向索引5:
print(tobaccos[0:5])
# 从索引2开始的5-2=3个,不是指向索引5:
print(tobaccos[2:5])
print(tobaccos[-1])
# 从第0个到尾:
print(tobaccos[0:])

黄鹤楼(软珍品)
中南海(硬酷爽风尚)
[‘黄鹤楼(软珍品)’, ‘中南海(硬酷爽风尚)’, ‘双喜(软经典)’, ‘中南海(典8)’, ‘蒙特二号10支装’]
[‘双喜(软经典)’, ‘中南海(典8)’, ‘蒙特二号10支装’]
利群(休闲云端)
[‘黄鹤楼(软珍品)’, ‘中南海(硬酷爽风尚)’, ‘双喜(软经典)’, ‘中南海(典8)’, ‘蒙特二号10支装’, ‘红双喜大喜’, ‘高希霸世纪二25支装’, ‘长白山(777)’, ‘黄金叶(乐途)’, ‘中南海(京韵细支烤烟)’, ‘钻石(经典纯和)’, ‘钻石(细支尚风)’, ‘中南海(典5)’, ‘黄鹤楼(硬15细支)’, ‘黄鹤楼(硬圣火)’, ‘双喜(国喜细支)’, ‘钻石(硬蓝)’, ‘钻石(一品荷花)’, ‘双喜(大国喜)’, ‘钻石(细支荷花)’, ‘云烟(清甜香)’, ‘黄鹤楼(软蓝)’, ‘利群(休闲云端)’]

1
2
tobaccos[-1] = '吸烟有害健康'
print(tobaccos[-1])

吸烟有害健康

1
2
3
4
5
# 按索引删
del tobaccos[0]
# 直接删除,判断一下元素是否在列表中
if '蒙特二号10支装' in tobaccos:
tobaccos.remove('蒙特二号10支装')

1
2
3
4
5
6
# 指定索引位置插入
tobaccos.insert(0, '中华(硬)')
# 在末尾新增
tobaccos.append('玉溪(软)')
print(tobaccos[0:5])
print(tobaccos[-1])

[‘中华(硬)’, ‘中南海(硬酷爽风尚)’, ‘双喜(软经典)’, ‘中南海(典8)’, ‘红双喜大喜’]
玉溪(软)

对列表的常用操作

1
2
3
4
5
6
7
8
9
10
11
12
print(len(tobaccos))
print(tobaccos.index('利群(休闲云端)'))
# 反向元素,后变前,前变后
# 这里直接打印为什么返回None?
print(tobaccos.reverse())
print(tobaccos)
# 移除最后一个元素并返回它
print(tobaccos.pop())
print(len(tobaccos))
# 清空列表
tobaccos.clear()
print(tobaccos)

23
22
None
[‘利群(休闲云端)’, ‘黄鹤楼(软蓝)’, ‘云烟(清甜香)’, ‘钻石(细支荷花)’, ‘双喜(大国喜)’, ‘钻石(一品荷花)’, ‘钻石(硬蓝)’, ‘双喜(国喜细支)’, ‘黄鹤楼(硬圣火)’, ‘黄鹤楼(硬15细支)’, ‘中南海(典5)’, ‘钻石(细支尚风)’, ‘钻石(经典纯和)’, ‘中南海(京韵细支烤烟)’, ‘黄金叶(乐途)’, ‘长白山(777)’, ‘高希霸世纪二25支装’, ‘红双喜大喜’, ‘蒙特二号10支装’, ‘中南海(典8)’, ‘双喜(软经典)’, ‘中南海(硬酷爽风尚)’, ‘黄鹤楼(软珍品)’]
黄鹤楼(软珍品)
22
[]

元组

元组tuple用()表示

1
2
3
4
tobaccos = (
'黄鹤楼(软珍品)', '中南海(硬酷爽风尚)', '双喜(软经典)',
'中南海(典8)', '蒙特二号10支装', '红双喜大喜',
)

1
2
3
4
print(tobaccos[0])
print(tobaccos[1:5])
print(tobaccos[-1])
print(tobaccos[0:])

黄鹤楼(软珍品)
(‘中南海(硬酷爽风尚)’, ‘双喜(软经典)’, ‘中南海(典8)’, ‘蒙特二号10支装’)
红双喜大喜
(‘黄鹤楼(软珍品)’, ‘中南海(硬酷爽风尚)’, ‘双喜(软经典)’, ‘中南海(典8)’, ‘蒙特二号10支装’, ‘红双喜大喜’)

元组不可变,不能如列表这样随意更改

1
tobaccos[0] = '中华'

TypeError: ‘tuple’ object does not support item assignment

也不能像列表那样删除

1
del tobaccos[0]

TypeError: ‘tuple’ object doesn’t support item deletion

但可以删除整个元组渣都不剩!

1
del tobaccos

元组也不具备列表insert、append两个增加方法
如硬要增加只能这样再搞个元组 + 合并进去,注意那个逗号,

1
2
newtuple = ('中华',) + tobaccos
print(newtuple)

(‘中华’, ‘黄鹤楼(软珍品)’, ‘中南海(硬酷爽风尚)’,
‘双喜(软经典)’, ‘中南海(典8)’, ‘蒙特二号10支装’, ‘红双喜大喜’)

列表与元组怎样选择,怎样转换

列表和元组里面都可以任意存储不同类型的数据
int、float、string杂食不会消化不良
列表主要用来存储经常需要变动的数据
元组可存储:坐标数据,地理位置的经纬度等不会变化的数据

1
2
3
4
5
6
7
8
my_list = [('中华(硬)', 381.6, 450)]

# 查看内存占用情况,使用 __sizeof__() 来获取
print(my_list.__sizeof__())
# 增加元素后内存占用由24增加为40
my_list.append(('天子(软黄)', 392.2, 450))
print(my_list)
print(my_list.__sizeof__())

24
[(‘中华(硬)’, 381.6, 450), (‘天子(软黄)’, 392.2, 450)]
40

1
2
3
4
5
my_list = [1, 2, 3, 4, 5]
my_tuple = tuple(my_list)
print(my_tuple)
my_list = list(my_tuple)
print(my_list)

(1, 2, 3, 4, 5)
[1, 2, 3, 4, 5]

字典

字典里面的元素是由 key : value 键值对组成
键key不可重复

1
tobaccos = {'品名': '中华(硬)', '批发价': 381.6,}

1
2
3
print(tobaccos)
print(tobaccos['品名'])
print(tobaccos['批发价'])

{‘品名’: ‘中华(硬)’, ‘批发价’: 381.6}
中华(硬)
381.6

1
2
3
tobaccos['品名'] = '中华(软)'
tobaccos['批发价'] = 583
print(tobaccos)

{‘品名’: ‘中华(软)’, ‘批发价’: 583}

指定键key删除

1
2
del tobaccos['批发价']
print(tobaccos)

{‘品名’: ‘中华(软)’}
清空字典:

1
tobaccos.clear()

删除字典:

1
del tobaccos

1
2
3
# 增
tobaccos['焦油量'] = 11.0
print(tobaccos)

{‘品名’: ‘中华(软)’, ‘批发价’: 583, ‘焦油量’: 11.0}

字典和列表以及元组之间的转换

1
2
3
4
print(tobaccos.keys())
print(tobaccos.values())
# 将字典中的键值对分别转换成一个一个的元组,再由这些元组组成列表
print(tobaccos.items())

dict_keys([‘品名’, ‘批发价’, ‘焦油量’])
dict_values([‘中华(软)’, 583, 11.0])
dict_items([(‘品名’, ‘中华(软)’), (‘批发价’, 583), (‘焦油量’, 11.0)])

集合

集合set本质是一种hash,具有唯一、无序、不可重复性
虽然也用花括号表示,但没有字典的键值对概念,就是个集合而也

1
2
3
4
5
6
7
a = {1, 2, 3}
# 元组转集合
b = set((1, 2, 3, 4, 5))
print(b)
# 列表转集合
b = set([1, 2, 3, 4, 5])
print(b)

{1, 2, 3, 4, 5}
{1, 2, 3, 4, 5}

1
2
3
# 自动去重值
c = {1, 1, 1, 2, 2, 2, 3, 3, 3}
print(c)

{1, 2, 3}

判断元素在不在集合中

1
2
3
4
a = {1, 2, 3}
print(1 in a)
print(4 in a)
print(4 not in a)

True
False
True

增 add方法

set可以存放字符串,数字和元组,不能存放列表[]

1
2
3
4
5
6
7
8
a.add(4)
print(a)
a.add((5, 6, 7))
print(a)
a.add('数学概念集合')
print(a)
# 不能增加列表
# a.add([8, 9])

{1, 2, 3, 4}
{1, 2, 3, 4, (5, 6, 7)}
{1, 2, 3, 4, (5, 6, 7), ‘数学概念集合’}

追加update

可传入列表、元组、集合追加
这比add方法好用啊
可以看到其中追加的字符串的打印结果是无序状态

1
2
3
4
5
a = {1, 2, 3}
a.update([4, 5, '列表'])
a.update((6, 7, '元组'))
a.update({8, 9, '集合'})
print(a)

{1, 2, 3, 4, 5, ‘列表’, 6, 7, 8, 9, ‘元组’, ‘集合’}

remove方法:元素不存在要报错
discard方法:即使元素不存在也不报错

1
2
3
4
5
6
7
8
a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'test'}
a.remove('test')
print(a)
a.discard(10)
a.discard(10)
print(a)
a.clear()
print(a)

{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
{1, 2, 3, 4, 5, 6, 7, 8, 9}
set()

并集交集子集父集

1
2
3
4
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
print(a.union(b))
print(a.intersection(b))

{1, 2, 3, 4, 5, 6}
{3, 4}

1
2
3
4
5
6
c = {7, 8}
d = {7, 8, 9, 10}
# 判断c集合是否为d集合的子集
print(c.issubset(d))
# 判断d集合是否为c集合的父集
print(d.issuperset(c))

True
True