文章目录
@[toc]
Python中的序列(上):字符串、列表、元组、集合、字典
一、序列的生成与索引(基础)
1.1 字符串string
1.2 列表list
1.3 元组tuple
1.4 集合set
1.5 字典dict
二、序列的生成(进阶)
2.1 列表的循环生成
2.2 字典的合成
三、 序列之间的相互转换
Python中的序列(上):字符串、列表、元组、集合、字典
一、序列的生成与索引(基础)
1.1 字符串string
str1, str2 = 'hello world', "hello world"
# 引号支持换行
str3 = '''hello,
world'''
str4 = """hello,
world"""
# for生成字符串
开始和结束位置下标可以不写,默认第一个和最后有一个。可以为负数,表示倒数第几个。
索引的内容不包含结束位置下标的指示的内容
步长默认为1,可以不写,可以为负数,表示倒序
name = "风萧萧易兮水寒,壮士一去兮不复还"
print(name[0]) # 风
print(name[1:7:2]) # 萧易水
print(name[:3]) # 风萧萧
print(name[-2:4]) # 倒数第二个至第四个,不符合逻辑,输出为空
print(name[-4:-2]) # 兮不
print(name[::-2]) # (倒序,间隔为2 ) 还不去士,水易萧
print(name[-2:4:-1]) # 复不兮去一士壮,寒水(倒数第二个至第四个,因为逆序,符合逻辑)
1.2 列表list
列表类似数组,列表可以嵌套列表,类似多维数组。列表内的元素可以是不同的数据类型(类型支持数字,字符串,列表,元组,字典,集合等几乎所有数据类型)。
list1 = ['张三', 18, '北京', '文员']
listArray = [
['张三', 18, '北京', 'IT'],
'你好',
2020,
('张三', 18),
set('集合'),
{'type': '字典'}
]
列表的索引支持下标索引和切片
print(listArray[0][2]) # 嵌套时可以采用多维的方式
1.3 元组tuple
简单理解,元组是不可修改的列表。列表有的,元组都可以,但是元组的元素为单个时,后需要加“,” ,否则为该元素的类型。
t1 = ("张三", 18, "北京")
tArray = (
['张三', 18, '北京', 'IT'],
'你好',
2020,
('张三', 18),
set('集合'),
{'type': '字典'}
)
# 注意
t3 = ("张三",) # 类型为tuple
t4 = ("张三") # 类型为string
元组的索引与列表几乎一致。
1.4 集合set
集合不同于列表、元组之处在于集合是无序的,不重复的。所以集合的输出的是无序的,并且会过滤掉重复的元素。
集合可以用set()创建,也可以用类似于字典的{}创建,如果要创建空集合只能用set() 。
集合中的元素不支持元组、集合、字典。
s1 = set("你好18")
s2 = {'a', 'b', 'c', 'b'}
print(s1) # 输出无序的去掉重复元素的集合{'d', 'e', 'f', 'g', 'a', 'c'}
print(s2) # 输出无序的去掉重复元素的集合{'a', 'b', 'c'}
sArray = {
'你好',
2020,
('张三', 18),
}
集合是无序的,所以不能使用下标索引。
1.5 字典dict
字典的数据是以键值对形式存在的,所以字典能解决当序列被打乱后不能使用原下标索引的问题。
当然,键值的类型也可支持不同的数据类型,但一般没有意义,不再举例。
dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'}
字典的索引是根据key找value,所以不能使用下标索引。而且字典的遍历也比较特殊。
print(dict1['name']) # 输出Tom
一些函数也可以进行索引:
print(dict1.get('name')) # Tom
print(dict1.get('id', 100)) # 如果没有key,则指定返回100
print(dict1.keys()) # dict_keys(['name', 'age', 'gender'])
print(dict1.values()) # dict_values(['Tom', 20, '男'])
print(dict1.items()) # dict_items([('name', 'Tom'), ('age', 20), ('gender', '男')])
字典的遍历:
# 遍历字典的元素,item是以元组的形式被输出
# ('name', 'Tom')
# ('age', 20)
# ('gender', '男')
for item in dict1.items():
print(item)
# 遍历字典的key
for key in dict1.keys():
print(key)
# 遍历字典的value
for value in dict1.values():
print(value)
# 遍历字典的键值对
for key, value in dict1.items():
print(f'{key}={value}')
如何提取字典中的目标数据?
dict3 = {'MBP': 268, 'HP': 125, 'DELL': 201, 'Lenovo': 199, 'acer': 99}
提取上述电脑数量大于等于200的字典数据?
TagerDict3 = {key: value for key, value in dict3.items()
if value >= 200}
# TagerDict3 = {}
# for key, value in dict3.items():
# if value >= 200:
# TagerDict3[key] = value
print(TagerDict3) # {'MBP': 268, 'DELL': 201}
二、序列的生成(进阶)
2.1 列表的循环生成
循环生成一维列表
# 生成一维列表,range(start, end, step)是生成start到end范围内的step步长的数
list1 = [i for i in range(10)]
# 可以写成如下
# list1 = []
# for i in range(10):
# list1.append(i)
print(list1)
循环生成多维列表
# 生成二维列表
list2 = [(i, j) for i in range(1, 3) for j in range(3)]
# 可以写成如下
# list2 = []
# for i in range(1, 3):
# for j in range(3):
# list2.append((i, j))
print(list2)
2.2 字典的合成
# 生成字典
dict1 = {i: i**2 for i in range(1, 5)}
print(dict1)
# 合并两个列表为一个字典
listName = ['name', 'age', 'gender']
listValue = ['Tom', 20, 'man']
dict2 = {listName[i]: listValue[i] for i in range(len(listName))}
print(dict2)
三、 序列之间的相互转换
tuple() :将某个序列转换成元组
list1 = [10, 20, 30, 40, 50, 20]
s1 = {100, 200, 300, 400, 500}
print(tuple(list1))
print(tuple(s1))
list() :将某个序列转换成列表
t1 = ('a', 'b', 'c', 'd', 'e')
s1 = {100, 200, 300, 400, 500}
print(list(t1))
print(list(s1))
set() :将某个序列转换成集合
list1 = [10, 20, 30, 40, 50, 20]
t1 = ('a', 'b', 'c', 'd', 'e')
print(set(list1))
print(set(t1))