列表
- 创建列表:[ ],元素用‘ ,’隔开。里面可以放任何类型的数据。
- 向列表添加元素:列表名.append() 元素放到最后。estend()扩充列表,estend([…]). insert()指定位置[位置,元素].从零开始,也可以是负数,表示从末尾开始。
- 从列表中获取元素。列表名[位置]。len()获取列表长度
a=[1,2,3,4,5,6] a[len(a)-1] >>6
获取最后一个元素。 - 获取子列表的元素
a[][]
- 从列表删除元素:remove()指定删除元素, pop()指定元素并弹出删除,若不带参数默认时最后一个。del语句 del a[ ]
- 列表切片:list=[1,2,3,4,5,6,7,87,9] list[start:stop:step]
list[:2]#取出位置0,1的元素 list[:]#取出全部元素 list[::-1] >>list[9,8,7,6,5,4,3,2,1]
注:切片操作不会影响元列表,但是del作用域切片会作用于原列表。为切片后的列表赋值list[0:2]=[9,8]>>list=[9,8,3,4,5,6,7,8,9]
可以用于列表的复制,复制出来的时独立的不会随原来的改变。 - 列表操作符:’+’ list2=list1+list3,’*'重复,in/not in 判断元素是否在同一层列表,子列表不能识别。
- 列表内置函数:list.count()统计某个元素在列表里出现的次数。 list.index(seq,start,stop)返回某个元素在列表里的索引值。 list.reverse()将整个列表反转。list.sort()对列表排序,默认从小到大,从大到小可以排完序在调用reverse()或list.sort(reverse=True)。list.copu()复制。list.clear()清空列表。
- 列表推导式:[表达式 for A in B]
>>> list1 = [(x, y) for x in range(10) for y in range(10) if x%2==0 if y%2!=0]
元组(tuple)
- 元组就是有限制的列表,只可读不能任意修改。创建元组用小括号
tuple=(1,2,3,4) tuple[1]>>2
.元组的本体其实是逗号。创建单个元素的元组tuple=(1,)#逗号必不可少
- 更新和删除元组,虽然元组不能修改但可以通过切片和拼接实现元组的更新。
tuple[;2]+(3,)+tuple[2:]
字符串
- 字符串就是一种元组,内置方法很多就举几个例子:a. str.casefold() 将字符串的英文字母改为小写。b. count(sub,start,end) 查找sub参数在字符串中出现的次数,可指定范围。c. find/index(sub,start,end) 查找sub在字符串中第一次出现的位置,找到了返回索引值,找不到find会返回-1,index()返回异常。d. replace(old,new,count) 将字符串中old参数替换成new参数,count可以指定最大替换次数。e. split(sip=None,maxsplit=-1) 用于拆分字符串。
a='1-2-3-4-5-6' a.split(sep='-') >>['1','2','3','4','5','6']
maxsplit默认是不限制拆分次数。 f. join(iterable) 用于拼接字符a=['1','2','3','4'] '-'.join(a) >>'1-2-3-4'
symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
nums = '0123456789'
password = input('请输入需要检查的密码:')
a = len(password)
if a <= 8:
level1 = 1
elif 8 < a < 16:
level1 = 2
else:
level1 = 3
level2 = 0
for each in password:
if each in symbols:
level2 += 1
break
for each in password:
if each in chars:
level2 += 1
break
for each in password:
if each in nums:
level2 += 1
break
while True:
print('你的密码安全等级为:', end = '')
if level1 ==1 and level2 == 1:
print('低')
elif level1 == 3 and level2 == 3 and password[0] in chars:
print('高')
else:
print('中')
print('''请按以下方式提升您的密码安全级别:
1. 密码必须由数字、字母及特殊字符三种组合
2. 密码只能由字母开头
3. 密码长度不能低于16位''')
break
判断密码安全性的小程序,详见小甲鱼的书吧。。。
共享引用和在原位置修改
l1 = [1,2,3]
l2 = l1
l1 = 24
l2 = [1,2,3]
li[0] = 24
l2 = [24,2,3]
l1 l2引用了同一个共享的对象,当l1指向另一个对象,l2不变。但当这个指向的对象改变了,这类修改会在原位置覆盖列表对象中的某部分值,这个对象是共享的,所以l2也会改变。可以使用 copy()或切片来复制字典或集合。
可变的对象包括列表,字典,集合,一些通过class语句定义的对象,根据需要选择copy。
copy模块:
浅copy:复制父对象,子对象仍然使用引用的方式。深copy:复制了对象和对象的所有子对象
a = ['111', '222', ['333', '444']]
b = copy.copy(a)
b[2][0] = '555'
print(a, b)
# ['111', '222', ['555', '444']] ['111', '222', ['555', '444']]
# 我们的目的又达不到了,如何是好
b = deep_copy(a) # 以递归的方式实现
b[2][0][0] = '555'
copy.copy(x) 浅copy
copy.deepcopy(x) 深copy
浅copy和深copy的区别只与复合对象有关(对象包含其他对象,如列表或类实例)
浅copy构造了一个新的复合对象,然后(尽可能地)将原始对象的引用插入。
深copy构造了一个新的复合对象,然后递归地将原始对象的副本插入。
共享引用和相等
‘==’ 是测试两个对象是否有相同的值, ‘is’ 在检测对象的同一性,如果两个变量名精确的指向同一个对象,他会返回Ture,可以看作更严格形式的相等测试。
l = [1,2,3]
m = [1,2,3]
l == m >>> true
ll is m >>> false
x=42
y=42 # 虽然我们运行了两个不同的字面量表达式,由于缓存机制其实是一个
x is y >>>true