【Python】入门学习笔记——元组、列表、字典介绍、转换及遍历
软件使用:Pycharm
编辑日期:2022.9.25
编辑人:Aria
一、Python变量赋值
(一)多变量同时赋同一个值
a = b = c = 1
print(a,b,c)
输出结果:
(二)多变量同时赋不同值
a, b, c = 1, 2, "john"
print(a,b,c)
输出结果
两个整型对象 1 和 2 分别分配给变量 a 和 b,字符串对象 “john” 分配给变量 c。
二、Python数据类型
(一)数字
- int(有符号整型)
- long(长整型,也可以代表八进制和十六进制)
- float(浮点型)
- complex(复数)
注意:long 类型只存在于 Python2.X 版本中,在 2.2 以后的版本中,int 类型数据溢出后会自动转为long类型。在 Python3.X 版本中 long 类型被移除,使用 int 替代。
(二)字符串
字符串或串(String)是由数字、字母、下划线组成的一串字符。
- 从左到右索引默认0开始的,最大范围是字符串长度少1
- 从右到左索引默认-1开始的,最大范围是字符串开头
[头下标:尾下标] 如 s[1:5] 截取出来的内容含头不含尾巴
s = 'abcdef'
print(s[1:5])
输出结果为 bcde ,不包含5 f
此外 ,Python 列表截取可以接收第三个参数,参数作用是截取的步长,如s[1:5:2],截取s中的1-5的内容,步长为2(间隔一个位置)
s = 'abcdef'
print(s[1:5])
print(s[1:5:2])
输出结果为bd ([1:5]截取内容为bcde,步长为 2,因此删除c和e)
(三)列表
list = ['runoob', 786, 2.23, 'john', 70.2]
tinylist = [123, 'john']
print(list ) # 输出完整列表
print(list[0]) # 输出列表的第一个元素
print(list[1:3] ) # 输出第二个至第三个元素
print(list[2:] ) # 输出从第三个开始至列表末尾的所有元素
print(tinylist * 2 ) # 输出列表两次
print(list + tinylist ) # 打印组合的列表
输出结果:
[‘runoob’, 786, 2.23, ‘john’, 70.2]
runoob
[786, 2.23]
[2.23, ‘john’, 70.2]
[123, ‘john’, 123, ‘john’]
[‘runoob’, 786, 2.23, ‘john’, 70.2, 123, ‘john’]
注意: print(tinylist * 2 ) 输出结果为同一个列表。
(三)元组
元组是另一个数据类型,类似于 List(列表)。
元组用 () 标识。内部元素用逗号隔开。但是元组不能二次赋值,相当于只读列表。
tuple = ('runoob', 786, 2.23, 'john', 70.2)
tinytuple = (123, 'john')
print(tuple) # 输出完整元组
print(tuple[0]) # 输出元组的第一个元素
print(tuple[1:3]) # 输出第二个至第四个(不包含)的元素
print(tuple[2:]) # 输出从第三个开始至列表末尾的所有元素
print(tinytuple * 2) # 输出元组两次
print(tuple + tinytuple) # 打印组合的元组
输出结果
(‘runoob’, 786, 2.23, ‘john’, 70.2)
runoob
(786, 2.23)
(2.23, ‘john’, 70.2)
(123, ‘john’, 123, ‘john’)
(‘runoob’, 786, 2.23, ‘john’, 70.2, 123, ‘john’)
注意: print(tinytuple * 2) # 输出元组两次,最后输出结果为同一个元组(),
(三)字典
dict = {}
dict['one'] = "This is one"
dict[2] = "This is two"
tinydict = {'name': 'runoob', 'code': 6734, 'dept': 'sales'}
print( dict['one']) # 输出键为'one' 的值
print(dict[2] ) # 输出键为 2 的值
print(tinydict) # 输出完整的字典
print (tinydict.keys()) # 输出所有键
print (tinydict.values()) # 输出所有值
print(dict)
字典用"{ }"标识。字典由索引(key)和它对应的值value组成。即dict{key1:values1}、dict{key1:values1,key2:values2}。同时,一个字典中多元素,也是通过,进行分开。
列表是有序的对象集合,字典是无序的对象集合。
即:字典当中的元素是通过键来存取的,而不是通过偏移存取(非位置)。
(四)对比
tuple = ( 'runoob', 786 , 2.23, 'john', 70.2 )
list = [ 'runoob', 786 , 2.23, 'john', 70.2 ]
list[2] = 1000 # 列表中是合法应用
print(list)
print(tuple[2])
list[2] 表示列表中对应位置2的元素,可赋值。
tuple[2]表示元组中对应的位置2的元素,但是不可赋值。
因此,可使用list[2] = 1000;而 tuple[2] = 100会报错。
输出结果:
(五)转换
有时候,需要对数据内置的类型进行转换,数据类型的转换,只需将数据类型作为函数名即可。
以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象,表示转换的值。
注意:
1.dict(d) 创建一个字典。d 必须是一个序列 (key,value)元组。
2.tuple(s) 将序列 s 转换为一个元组
1.转化成字符串
fruits = ('apple', 'banana', 'orange')
# 元组转换为字符串:
print(fruits.__str__())
fruit_list = ['apple', 'banana', 'orange']
# 列表转换为字符串:
print(str(fruit_list))
2.字典、元组、列表之间的转换
- 字典转化成元组或列表 (可行)
dict = {}
dict['one'] = "This is one"
dict[2] = "This is two"
tup = tuple(dict) # 将字典的key转换为元组:
tupval = tuple(dict.values()) # 将字典的value转换为元组:
lis = list(dict) #将字典的key转换成列表
lisval = list(dict.values()) #将字典的value转换成列表
print(dict)
print(tup)
print(tupval)
print(lis)
print(lisval)
tupkey = tuple(dict.keys()) # 将字典的key转换为元组;
liskey = list(dict.keys()) #将字典的key转换成列表;
print(tupkey)
print(liskey)
输出结果:
{‘one’: ‘This is one’, 2: ‘This is two’}
(‘one’, 2)
(‘This is one’, ‘This is two’)
[‘one’, 2]
[‘This is one’, ‘This is two’]
(‘one’, 2)
[‘one’, 2]
发现直接字典转化成元组或者列表,输出的结果为其索引Key
- 列表转化成字典 (不可行)
tinylist = [123, 'john']
dic = dict(tinylist) #将列表转换成字典
print(dic)
报错,因为dict(d) 创建一个字典。d 必须是一个序列 (key,value)元组。
- 元组转化成字典 (不可行)
tup = ('runoob', 786, 2.23, 'john', 70.2)
dic = dict(tup) #将无序列 (key,value)的元组 转换成字典
print(dic)
报错,因为tup元组不存在序列。
- 元组转换成列表 (可行)
tuple = ('runoob', 786, 2.23, 'john', 70.2)
lis = list(tuple)
print(tuple)
print(lis)
- 列表转换成元组 (可行)
lis = ['runoob', 786, 2.23, 'john', 70.2]
tup = tuple(lis)
print(lis)
print(tup)
因此元组、列表、字典之间的转换关系如下:
- 列表、元组转字典可能有其他方法,本文中在不存在序列 (key,value)元组情况下,不支持转换。
- [ ]
3.字符串转换成字典、元组、列表
#将字符串转换为元组:
str = "(1,2,3)"
print(tuple(eval(str)))
#将字符串转换为列表:
str = "(1,2,3)"
print(list(eval(str)))
#将字符串转换为字典:
str1 = "{'a':1 ,'b',2}"
print(dict(eval(str1)))
结果:
(1, 2, 3)
[1, 2, 3]
- #将字符串转换为字典:报错,需要重新查找代码。
4.特殊情况下的字典与元组、列表间的转换(不完整,待修改)
字典类似于散列,列表类似于链表,元组类似于列表只是元素无法改变。所以,要把散列转换为链表而顺序不变是不可行的。但可以借助于有序字典OrderedDict,有序字典是字典的子类,它可以记住元素添加的顺序,从而得到有序的字典。有序字典这里就不深入探讨,给出普通字典的例子参考,代码如下:
import collections
data = [('a',1),('b',3),('c',2)]
#按数据中key值的大小排序
od = collections.OrderedDict(sorted(data,key=lambda s:s[0]))
print(od)
#按数据中value值的大小排序
os = collections.OrderedDict(sorted(data,key=lambda s:s[1]))
print(os)
输出结果:
OrderedDict([(‘a’, 1), (‘b’, 3), (‘c’, 2)])
OrderedDict([(‘a’, 1), (‘c’, 2), (‘b’, 3)])
部分代码可参考本文的 三(二)多value的字典转化成元组
三、实际操作
(一)元组、列表、字典的遍历
1.元组的遍历
fruits=("apple","banana","orange")
for i in range(len(fruits)):
print(fruits[i])
print(fruits[0])
print(fruits[1])
print(fruits[2])
print(len(fruits))
print(range(len(fruits)))
输出结果
apple
banana
orange
apple # print(fruits[0])
banana # print(fruits[1])
orange # print(fruits[2])
3 # print(len(fruits))
range(0, 3) # print(range(len(fruits)))
PS: 元组的遍历借助 range() 函数,基本思想是通过元组的长度使用for循环进行遍历。
如过再输出print(fruits[3]) 会报错,因为不存在,(0,3)含头不含尾。
- 此内容需要补充len()、range()的知识。
2.列表的遍历
列表的遍历可以直接使用for循环,也可以借助 range() 函数:
# 直接遍历
fruit_list1 = ['apple', 'banana', 'orange']
for fruit1 in fruit_list1:
print(fruit1)
# 借助range()函数进行遍历
name_list2 = ['Aria', '小明', '小红']
for i in range(len(name_list2)):
print(name_list2[i])
注意:区别元组与列表的区别,元组也可直接读取(列表的遍历可以直接使用for循环,元组也可以),可能是Python版本区别。
如:
# 直接遍历
fruits=("apple","banana","orange")
for fruit1 in fruits:
print(fruit1)
能够运行。
3.字典的遍历
fruit_dict = {'apple':1, 'banana':2, 'orange':3}
for key in fruit_dict:
print(fruit_dict[key])
(二)多value的字典转化成元组
#失败案例
dic = {7: [1,2,3],8: [4,5,6], 9: [10,11]}
my_list = list(zip(dic.keys(),dic.values()))
print(my_list)
#正确操作
my_list2 = []
for key,val in dic.items():
for va in val:
my_list2.append((key,va))
print(my_list2)
输出结果为:
[(7, [1, 2, 3]), (8, [4, 5, 6]), (9, [10, 11])]
[(7, 1), (7, 2), (7, 3), (8, 4), (8, 5), (8, 6), (9, 10), (9, 11)]
参考:
1.优快云文章,Python中元组、列表、字典的遍历和相互转化
2.菜鸟教程,Python基础教程
3.优快云文章,python字典转化为元组
4.优快云文章,Python——有序字典 (OrderedDict)