python基础数据类型之列表,字典,元组,集合

1.列表list

1.列表的创建

# 创建一个列表有三种方式:

# 方式一:(常用)
l1 = [1, 2, '小白']


# 方式二:(不常用)
l1 = list()  # 空列表
# l1 = list(iterable)  # 可迭代对象
l1 = list('123')
print(l1)  # ['1', '2', '3']

# 方式三:列表推导式 l1 = [i for i in range(1,5)] print(l1) # [1, 2, 3, 4]

2.列表的索引切片

索引

li = [100, '小白', True, [1, 2, 3]]
li2= li[1]
print(li2)
# 小白

li =  [100, '小白', True, [1, 2, 3]]
li3 = li[3][1]
print(li3)
# 2 

切片

li = [100, '小白', True, [1, 2, 3]]
li4 = li[:2]
print(li4)
# [100, '小白']

li = [100, '小白', True, [1, 2, 3],22]
li5 = li[::2]
print(li5)
# [100, True, 22]

索引与切片相关练习题

li = [1, 3, 2, "a", 4, "b", 5,"c"]
# 通过对li列表的切片形成新的列表l1,l1 = [1,3,2]
li = [1, 3, 2, "a", 4, "b", 5,"c"]
l1 = li[:3]
print(l1)

# 通过对li列表的切片形成新的列表l2,l2 = ["a",4,"b"]
li = [1, 3, 2, "a", 4, "b", 5,"c"]
l2 = li[3:-2]
l2 = li[3:6]
print(l2)

# 通过对li列表的切片形成新的列表l4,l4 = [3,"a","b"]
li = [1, 3, 2, "a", 4, "b", 5,"c"]
l3 = li[1:-2:2]
print(l3)

# 通过对li列表的切片形成新的列表l6,l6 = ["b","a",3]
li = [1, 3, 2, "a", 4, "b", 5,"c"]
l6 = li[-3::-2]
print(l6)

3.列表的常用方法(增删改查)

append()  追加

alist = ["xiaobai", "美丽的茧", "道路和生活"]
alist.append("在路上")
print(alist)
# ['xiaobai', '美丽的茧', '道路和生活', '在路上']

insert()  插入元素

# insert()  参数格式
insert(索引位置,插入元素)


alist = ["xiaobai", "美丽的茧", "道路和生活"]
alist.insert(1, "在路上")
print(alist)
# ['xiaobai', '在路上', '美丽的茧', '道路和生活']

alist = ["xiaobai", "美丽的茧", "道路和生活"]
alist.insert(-1, "在路上")
print(alist)
# ['xiaobai', '美丽的茧', '在路上', '道路和生活']

extend()  迭代着追加

alist = ["xiaobai", "美丽的茧", "道路和生活"]
alist1 = ["在路上", "爱你就像爱生命"]
alist.extend(alist1)
print(alist)
# ['xiaobai', '美丽的茧', '道路和生活', '在路上', '爱你就像爱生命']

pop()   

# 默认删除最后一个
l1 = ['xiaobai', '美丽的茧', '道路和生活', '在路上', '爱你就像爱生命']
l1.pop()
print(l1)
# ['xiaobai', '美丽的茧', '道路和生活', '在路上']

# 按照索引位置进行删除
l1 = ['xiaobai', '美丽的茧', '道路和生活', '在路上', '爱你就像爱生命']
l1.pop(2)
print(l1)
# ['xiaobai', '美丽的茧', '在路上', '爱你就像爱生命']

# 返回删除的元素
l1 = ['xiaobai', '美丽的茧', '道路和生活', '在路上', '爱你就像爱生命']
l3 = l1.pop(2)
print(l3)
# 道路和生活

remove()  指定删除元素,如果有重名元素,默认删除从左边的第一个,如果指定的元素不存在,则会报错

alist = ['xiaobai', '美丽的茧', '道路和生活', '在路上', '爱你就像爱生命']
alist.remove('美丽的茧')
print(alist)
# ['xiaobai', '道路和生活', '在路上', '爱你就像爱生命']


alist = ['xiaobai', '美丽的茧', '道路和生活', '在路上', '爱你就像爱生命',"美丽的茧"]
alist.remove('美丽的茧')
print(alist)
# ['xiaobai', '道路和生活', '在路上', '爱你就像爱生命', '美丽的茧']


alist = ['xiaobai', '美丽的茧', '道路和生活', '在路上', '爱你就像爱生命']
alist.remove('美丽的春茧')
print(alist)
# ValueError: list.remove(x): x not in list

clear() 清除

alist = ['xiaobai', '美丽的茧', '道路和生活', '在路上', '爱你就像爱生命']
alist.clear()
print(alist)
# []

del 删除

alist = ['xiaobai', '美丽的茧', '道路和生活', '在路上', '爱你就像爱生命']
del alist[-1]
print(alist)
# ['xiaobai', '美丽的茧', '道路和生活', '在路上']

alist = ['xiaobai', '美丽的茧', '道路和生活', '在路上', '爱你就像爱生命']
del alist[::-2]
print(alist)
# ['美丽的茧', '在路上']

count()  计数

alist = ['xiaobai', '美丽的茧', '道路和生活', '在路上', '爱你就像爱生命', "xiaobai"]
alist1 = alist.count("xiaobai")
print(alist1)
# 2

index() 获取该元素的索引位置

alist = ['xiaobai', '美丽的茧', '道路和生活', '在路上', '爱你就像爱生命', "xiaobai"]
alist1 = alist.index("xiaobai")
print(alist1)
# 0

sort()  排序,默认从小到大排序

l1 = [5, 4, 3, 7, 8, 6, 1, 9]
l1.sort()
print(l1)
# [1, 3, 4, 5, 6, 7, 8, 9]

l1 = [5, 4, 3, 7, 8, 6, 1, 9]
l1.sort(reverse = True)
print(l1)
# [9, 8, 7, 6, 5, 4, 3, 1]

reverse()  反转

l1 = [5, 4, 3, 7, 8, 6, 1, 9]
l1.reverse()
print(l1)
# [9, 1, 6, 8, 7, 3, 4, 5]

列表相加

v1 = [5, 4, 3, 7]
v2 = [4, 5, 6]
print(v1 + v2)
# [5, 4, 3, 7, 4, 5, 6]

列表与数字相乘

v2 = [4, 5, 6]
print(v2 * 3)
# [4, 5, 6, 4, 5, 6, 4, 5, 6]

4.列表的嵌套

l1 = [1, 2, 'xiaobai', [1, '小黑', 3,]]
# 1, 将l1中的'xiaobai'变成大写并放回原处。
l1 = [1, 2, 'xiaobai', [1, '小黑', 3,]]
l1[2] = l1[2].upper()
print(l1)


# 2,给小列表[1,'小黑',3,]追加一个元素'生活与道路'。
l1 = [1, 2, 'taibai', [1, '小黑', 3,]]
l1[3].append('生活与道路')
print(l1)


# 3,将列表中的'小黑'通过字符串拼接的方式在列表中变成'小黑太黑了'
l1 = [1, 2, 'xiaobai', [1, '小黑', 3,]]
l1[3][1] = l1[3][1]+"太黑了"
print(l1)

注意:循环列表,改变列表大小的问题

有列表lis = [11, 22, 33, 44, 55],请把索引为奇数对应的元素删除
# 错误方式
lis = [11, 22, 33, 44, 55]
for i in range(len(lis)-1):
    if i % 2 == 1:
        lis.remove(lis[i])
print(lis)
# [11, 33, 44]

# 方式一(直接删除)
lis = [11, 22, 33, 44, 55]
del lis[1::2]
print(lis)

# 方式二(倒序删除)
lis = [11, 22, 33, 44, 55]
for i in range(len(lis)-1,-1,-1):
    if i % 2 == 1:
       lis.pop(i)
print(lis)

# 方式三(思维置换)
lis1= []
for i in range(len(lis)):
    if i % 2 == 0:
        lis1.append(lis[i])
lis = lis1
print(lis)


总结:循环一个列表的时,最好不要改变列表的大小,这样会影响你的最终的结果

2.元组tuple

  只读列表,可以存储大量的数据,可以索引,切片,步长.但是内部元素不能做增删改。

元组的特殊性:

元组中如果只有一个元素,并且没有逗号,那么他不是元组,他与该元素的数据类型一致。
tu1 = (2,3,4)        # 类型是tuple
tu1 = (2)            # 类型是int
tu1 = ('xiaobai')    # 类型是str
tu1 = ([1,2,3])      # 类型是list
tu1 = (1,)           # 类型是tuple 

3.字典dict

1.字典的创建方式:

方式一:
dic = dict((('one', 1), ('two', 2), ('three', 3)))
print(dic)
# {'one': 1, 'two': 2, 'three': 3}

方式二:
dic = dict(one=1, two=2, three=3)
print(dic)
# {'one': 1, 'two': 2, 'three': 3}

方式三:
dic = dict({'one': 1, 'two': 2, 'three': 3})
print(dic)
# {'one': 1, 'two': 2, 'three': 3}

2.字典的常用方法(增删改查)

直接增加,有则改之,无则增加

dic = {'name': '小白', 'age': 18}
dic["happy"] = '球类运动'
print(dic)
# {'name': '小白', 'age': 18, 'happy': '球类运动'}


dic = {'name': '小白', 'age': 18, 'happy': '球类运动'}
dic["age"] = 35
print(dic)
# {'name': '小白', 'age': 35, 'happy': '球类运动'}

setdefault()  有则不变,无则添加

dic = {'name': '小白', 'age': 18, 'happy': '球类运动'}
dic.setdefault("name")
print(dic)
# {'name': '小白', 'age': 18, 'happy': '球类运动'}

dic = {'name': '小白', 'age': 18, 'happy': '球类运动'} dic.setdefault("sex") print(dic) # {'name': '小白', 'age': 18, 'happy': '球类运动', 'sex': None}
dic = {'name': '小白', 'age': 18, 'happy': '球类运动'} dic.setdefault("sex","") print(dic) # {'name': '小白', 'age': 18, 'happy': '球类运动', 'sex': '男'}

fromkeys()  创建一个字典,字典的所有的键来自一个可迭代对象,字典的值使用用一个

dic = dict.fromkeys('abc', 100)
print(dic)
# {'a': 100, 'b': 100, 'c': 100}

dic = dict.fromkeys([1, 2, 3], 'alex')
print(dic)
# {1: 'alex', 2: 'alex', 3: 'alex'}

dic = dict.fromkeys([1, 2, 3],[])
dic[1].append(666)
print(dic)
# {1: [666], 2: [666], 3: [666]}

pop()  根据键删除值,有返回值,设置第二个参数则无论字典中有无键都不会报错

dic = {'name': '小白', 'age': 18, 'happy': '球类运动'}
dic.pop("name")
print(dic)
# {'age': 18, 'happy': '球类运动'}

dic = {'name': '小白', 'age': 18, 'happy': '球类运动'}
dic1 = dic.pop("name")
print(dic1)
# 小白

dic = {'name': '小白', 'age': 18, 'happy': '球类运动'}
dic1 = dic.pop("sex")
print(dic1)
# 报错信息KeyError: 'sex'

# 设置第二个参数则无论字典中有无此键都不会报错 dic = {'name': '小白', 'age': 18, 'happy': '球类运动'} dic1 = dic.pop("name",None) print(dic1) # 小白 dic = {'name': '小白', 'age': 18, 'happy': '球类运动'} dic1 = dic.pop("sex",None) print(dic1) # None

clear()  清除

dic = {'name': '小白', 'age': 18, 'happy': '球类运动'}
dic.clear()
print(dic)
# {}

del  根据键删除值

dic = {'name': '小白', 'age': 18, 'happy': '球类运动'}
del dic['name']
print(dic)
# {'age': 18, 'happy': '球类运动'}

update()  更新,有则覆盖,无则添加

dic = {'name': '小白', 'age': 18}
dic.update(hobby='运动', hight='175')
print(dic)
# {'name': '小白', 'age': 18, 'hobby': '运动', 'hight': '175'}


dic = {'name': '小白', 'age': 18}
dic.update(name='小黑')
print(dic)
# {'name': '小黑', 'age': 18}


dic = {'name': '小白', 'age': 18}
dic.update([(1, 'a'),(2, 'b'),(3, 'c'),(4, 'd')])  
print(dic)
# {'name': '小白', 'age': 18, 1: 'a', 2: 'b', 3: 'c', 4: 'd'}


dic1 = {"name":"jin","age":18,"sex":"male"}
dic2 = {"name":"han123","weight":75}
dic1.update(dic2)  
print(dic1)  
# {'name': 'han123', 'age': 18, 'sex': 'male', 'weight': 75}

修改值

dic = {'name': '小白', 'age': 18, 'happy': '球类运动'}
dic["name"] = "小黑"
print(dic)
# {'name': '小黑', 'age': 18, 'happy': '球类运动'}

直接查找

dic = {'name': '小白', 'age': 18, 'happy': '球类运动'}
dic1 = dic["name"]
print(dic1)
# 小白

get()  根据键获取值,可以设置返回值

dic = {'name': '小白', 'age': 18, 'happy': '球类运动'}
dic1 = dic.get("name")
print(dic1)
# 小白

#可以设置返回值 dic = {'name': '小白', 'age': 18, 'happy': '球类运动'} dic1 = dic.get("sex","没有此键") print(dic1) # 没有此键
dic = {'name': '小白', 'age': 18, 'happy': '球类运动'} dic1 = dic.get("sex") print(dic1) # None

keys()  获取字典的键

dic = {'name': '小白', 'age': 18, 'sex': ''}
print(list(dic.keys()))
# ['name', 'age', 'sex']

for i in dic.keys(): print(i) # name # age # sex

values()  获取字典的值

dic = {'name': '小白', 'age': 18, 'sex': ''}
print(list(dic.values()))
# ['小白', 18, '男']

for i in dic.values():
    print(i)
# 小白
# 18
#

items()  获取字典的键值对

dic = {'name': '小白', 'age': 18, 'sex': ''}
print(list(dic.items()))
# [('name', '小白'), ('age', 18), ('sex', '男')]

for i in dic.items(): print(i) # ('name', "小白") # ('age', 18) # ('sex', '男')
for key,value in dic.items(): print(key,value) # name 小白 # age 18 # sex 男

练习题:

dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
# 请在字典中添加一个键值对,"k4": "v4",输出添加后的字典
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
dic["k4"] = "v4"
print(dic)


# 请在修改字典中 "k1" 对应的值为 "alex",输出修改后的字典
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
dic["k1"] = "alex"
print(dic)


# 请在k3对应的值中追加一个元素 44,输出修改后的字典
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
dic["k3"].append(44)
print(dic)


# 请在k3对应的值的第 1 个位置插入个元素 18,输出修改后的字典
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
dic["k3"].insert(0,18)
print(dic)

3. 字典的嵌套

dic = {
    'name': '汪峰',
    'age': 48,
    'wife': [{'name': '国际章', 'age': 38},],
    'children': {'girl_first': '小苹果','girl_second': '小怡','girl_three': '顶顶'}
}

# 1. 获取汪峰的名字。
name2 = dic.get("name")
print(name2)

# 2.获取这个字典:{'name':'国际章','age':38}。
# 方式一
name2 = dic.get("wife")[0]
print(name2)

# 3. 获取汪峰妻子的名字。
# 方式一
name2 = dic.get("wife")[0]
name3 = name2.get("name")
print(name3)

# 方式二
name2 = dic[ 'wife'][0]["name"]
print(name2)

# 4. 获取汪峰的第三个孩子名字。
# 方式一
name2 = dic.get("children")
name3 = name2.get("girl_three")
print(name3)

# 方式二
name2 = dic[ "children"]["girl_three"]
print(name2)

注意:循环字典,改变字典的大小的问题

# 将字典中键含有'k'元素的键值对删除。

# 错误实例
dic = {'k1':'太白','k2':'barry','k3': '白白', 'age': 18}
for i in dic:
    if 'k' in i:
        del dic[i]
print(dic)
# RuntimeError: dictionary changed size during iteration
# 翻译过来是:字典在循环迭代时,改变了大小。

方式一
lis = []
for key in dic.keys():
    if "k" in key:
        lis.append(key)
for v in lis:
    dic.pop(v)
print(dic)

方式二
for key in list(dic.keys()):
    if "k" in key:
        dic.pop(key)
print(dic)
# {'age': 18}

总结:循环一个字典时,如果改变这个字典的大小,就会报错。

4.集合 set

1.集合的初始

  容器的数据类型,内部元素是不可变的数据类型,集合是无序的,无重复的,本身是可变的数据类型。

集合的应用

  - 列表去重

  - 数据之间的关系

2.集合的创建

set1 = set({1, 2, "xiaobai"})
set1 = set{1, 2, "xiaobai"}
print(set1)

3.集合的常用方法

add()  添加

set1 = {'xiaobai', '美丽的茧', '道路和生活', '在路上', '爱你就像爱生命'}
set1.add("123")
print(set1)
# {'爱你就像爱生命', '美丽的茧', '在路上', 'xiaobai', '123', '道路和生活'}

update()  迭代着添加

set1 = {'xiaobai', '美丽的茧', '道路和生活'}
set2 = {1, 2, 3}
set1.update("123")
print(set1)
# {'道路和生活', 'xiaobai', '美丽的茧', '1', '3', '2'}

pop()  随机删除

set1 = {'xiaobai', '美丽的茧', '道路和生活', '在路上', '爱你就像爱生命'}
set1.pop()
print(set1)
# {'爱你就像爱生命', '美丽的茧', '在路上', '道路和生活'}

clear()  清除

set1 = {'xiaobai', '美丽的茧', '道路和生活', '在路上', '爱你就像爱生命'}
set1.clear()
print(set1)
# {}

remove()  根据元素删除

set1 = {'xiaobai', '美丽的茧', '道路和生活', '在路上', '爱你就像爱生命'}
set1.remove('美丽的茧')
print(set1)
# {'爱你就像爱生命',  '在路上', 'xiaobai', '123', '道路和生活'}

并集  (| 或者 union)

set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
set3 = set1 | set2
print(set3)
# {1, 2, 3, 4, 5, 6, 7, 8}

set1 = {1, 2, 3, 4, 5} set2 = {4, 5, 6, 7, 8} set3 = set1.union(set2) print(set3) # {1, 2, 3, 4, 5, 6, 7, 8}

交集  (& 或者 intersection)

set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
set3 = set1 & set2
print(set3)
# {4, 5}


set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
set3 = set1.intersection(set2)
print(set3)
# {4, 5}

差集  (- 或者 difference)

set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
set3 = set1 - set2
print(set3)
# {1, 2, 3}


set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
set3 = set2 - set1
print(set3)
# {6, 7, 8}


set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
set3 = set1.difference(set2)
print(set3)
# {1, 2, 3}

反差集  (^ 或者 symmetric_difference)

set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
set3 = set1 ^ set2
print(set3)
# {1, 2, 3, 6, 7, 8}

set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
set3 = set1.symmetric_difference(set2)
print(set3)
# {1, 2, 3, 6, 7, 8}
posted @ 2019-12-29 21:57  菜鸟学小白  阅读(243)  评论(0编辑  收藏  举报
ヾ(≧O≦)〃嗷~