可变与不可变
可变与不可变是针对数据类型而言的
按照存值个数划分
存一个值(数字型/字符串),存多个值(列表/字典)
x = 1 # 定义变量就会开辟一块新的内存空间存放变量
print(id(x)) # 140718444700496
x = x + 1
print(id(x)) # 140718444700528
数字类型不可变
lt = [1]
print(id(lt)) # 2755985236680
lt.append(2)
print(id(lt)) # 2755985236680
列表可变,在原来的内存空间追加值
总结:
- 可变:列表、字典
- 不可变:数字、字符串
列表内置方法
索引取值/索引修改值
lt = [1,2,3,4]
print(lt[0]) # 1
lt[0] = 5
print(lt) # [5,2,3,4]
索引切片
lt = [1,2,3,4]
print(lt[0:2]) # [1,2]
成员运算 in / not in
lt = [1,2,3,4]
print(2 in lt) # True
print(9 not in lt) # True
for循环
lt = [1,2,3,4]
for i in lt:
print(i)
# 打印结果:
1
2
3
4
len长度
lt = [1,2,3,'cwz',[1,23]]
print(len(lt)) # 5
append() 追加值
lt = [1,2]
lt.append(3)
print(lt) # [1,2,3]
sort() 排序
lt = [2,3,1,9,7]
lt.sort()
print(lt) # [1,2,3,7,9]
lt = ['cw','ae','pf']
lt.sort()
print(lt) # ['ae', 'cw', 'pf'] 按照单词第一个字母顺序排序
reverse() 反转
lt = [2,1,3]
lt.reverse()
print(lt) # [3,1,2] 列表顺序反转
index() 获取元素索引
lt = [1,2,3,4]
print(lt.index(2)) # 打印1
clear() 清空列表
lt = [1,2,3]
lt.clear()
print(lt) # [lt]
copy() 复制
lt1 = [1,2,3]
lt2 = lt1.copy()
print(lt2) # [1,2,3]
extend() 扩展列表
lt1 = [1,2,3]
lt2 = [4,5,6]
lt1.extend(lt2)
print(lt1)
# 打印:[1, 2, 3, 4, 5, 6]
remove() 移除
lt = [1,2,3]
lt.remove(3)
print(lt) # 打印 [1,2]
insert() 按照索引插入值
lt = [1,2,3,4]
lt.insert(1, '666')
print(lt)
# 打印结果: [1, '666', 2, 3, 4]
总结:
列表内置方法 | 用法 |
---|---|
append() | 追加值 |
sort() | 列表元素数字从大到小排序;列表元素字母按拼音是顺序排序 |
reverse() | 列表顺序反转 |
extend() | lt1.extend(lt2) 列表扩展 |
clear() | 清空列表 |
insert() | 按照索引插入值 |
remove | 移除列表指定值 |
copy() | lt.copy() 复制列表 |
index | lt.index(列表元素) 获取元素索引 |
字典内置方法
按key取值 / 按key修改值 / 按key增加值
dic = {'a':1, 'b':2, 'c':3}
print(dic['a']) # 1
dic['a'] = dic['a'] + 9
print(dic) # {'a': 10, 'b': 2, 'c': 3}
dic['d'] = 666
print(dic) # {'a': 10, 'b': 2, 'c': 3, 'd': 666}
成员运算(比较的是key)
dic = {'a':1, 'b':2, 'c':3}
print('name' in dic) # False
for循环(对key循环)
dic = {'a':1, 'b':2, 'c':3}
for i in dic:
print(i)
# 打印结果:
a
b
c
keys() / values() / items()
dic = {'a':1, 'b':2, 'c':3}
print(dic.keys()) # 获取所有key值 dict_keys(['a', 'b', 'c'])
print(dic.values()) # 获取所有value值 dict_values([1, 2, 3])
print(dic.items()) # 获取所有键值对 dict_items([('a', 1), ('b', 2), ('c', 3)])
get() 取值
dic = {'a':1, 'b':2, 'c':3}
print(dic.get('a')) # 取得1
print(dic.get('qq')) # 字典中没有要找的key值,则返回None
# 打印:None
print(dic.get('qq', 66)) # 字典中没有要找的key值,又给定数值,则返回该数值
# 打印:66
update() 扩展字典
dic1 = {'a':1}
dic2 = {'b':2}
dic1.update(dic2)
print(dic1)
# 打印结果:
{'a': 1, 'b': 2}
setdefault() 有则不更改,没有则增加
dic = {'a':1, 'b':2}
dic.setdefault('a',2)
print(dic) # {'a': 1, 'b': 2}
dic.setdefault('c', 9)
print(dic) # {'a': 1, 'b': 2, 'c': 9}
总结:
字典内置方法 | 用法 |
---|---|
get() | 找到了就找了;没有值返回None,如果给定数值,就返回该数值 |
update() | dic1.update(dic2) 扩展字典 |
setdefault() | 有则不更改,没有则增加 |
keys() / values() / items() | 获取全部key值 / 获取全部value值 / 获取全部键值对 |
练习
1. 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中
即: {'k1': 大于66的所有值, 'k2': 小于66的所有值}
lt = [11,22,33,44,55,66,77,88,99,90]
dic = {'k1': [], 'k2': []}
for i in lt:
if i > 66:
dic['k1'].append(i)
else:
dic['k2'].append(i)
print(dic)
2. 统计s='hello alex alex say hello sb sb'中每个单词的个数
结果如:{'hello': 2, 'alex': 2, 'say': 1, 'sb': 2}
s = 'hello alex alex say hello sb sb'
dic = {}
for i in s.split():
dic.setdefault(i,s.count(i))
print(dic)
3. 写代码,有如下变量,请按照要求实现每个功能
name = " aleX"
# 1) 移除 name 变量对应的值两边的空格,并输出处理结果
# 2) 判断 name 变量对应的值是否以 "al" 开头,并输出结果
# 3) 判断 name 变量对应的值是否以 "X" 结尾,并输出结果
# 4) 将 name 变量对应的值中的 “l” 替换为 “p”,并输出结果
# 5) 将 name 变量对应的值根据 “l” 分割,并输出结果。
# 6) 请输出 name 变量对应的值的第 2 个字符?
# 7) 请输出 name 变量对应的值的前 3 个字符?
# 8) 请输出 name 变量对应的值的后 2 个字符?
# 9) 请输出 name 变量对应的值中 “e” 所在索引位置?
# 10) 获取子序列,去掉最后一个字符。如: oldboy 则获取 oldbo。
(1)
name = " aleX"
print(name.strip())
(2)
print(name.startswith('a1'))
(3)
print(name.endswith('X'))
(4)
print(name.replace('l', 'p'))
(5)
print(name.split('l'))
(6)
print(name[1])
(7)
print(name[0:3])
(8)
print(name[3:])
(9)
print(name.find('e'))
(10)
s = 'oldboy'
print(s.rstrip('y'))
4. 假设有一个文件test.txt,内有如下内容
l=[
{'name':'alex','age':84},
{'name':'oldboy','age':73},
{'name':'egon','age':18},
]
需求:
1. 读取文件内容
2. 计算这三个人的年龄总和
with open('4.txt', 'r', encoding='utf8') as f:
data = f.read()
# print(data)
lt = eval(data[2:]) # eval可将字符串转为列表
print(lt)
age = 0
for i in lt:
age += i['age']
print("三人年龄总和为:", age)