Python随记(3)列表 元组 字符串 共享引用和在原位置修改( copy模块(深浅) 共享引用和相等(is)

列表
  1. 创建列表:[ ],元素用‘ ,’隔开。里面可以放任何类型的数据。
  2. 向列表添加元素:列表名.append() 元素放到最后。estend()扩充列表,estend([…]). insert()指定位置[位置,元素].从零开始,也可以是负数,表示从末尾开始。
  3. 从列表中获取元素。列表名[位置]。len()获取列表长度a=[1,2,3,4,5,6] a[len(a)-1] >>6获取最后一个元素。
  4. 获取子列表的元素a[][]
  5. 从列表删除元素:remove()指定删除元素, pop()指定元素并弹出删除,若不带参数默认时最后一个。del语句 del a[ ]
  6. 列表切片: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]可以用于列表的复制,复制出来的时独立的不会随原来的改变。
  7. 列表操作符:’+’ list2=list1+list3,’*'重复,in/not in 判断元素是否在同一层列表,子列表不能识别。
  8. 列表内置函数:list.count()统计某个元素在列表里出现的次数。 list.index(seq,start,stop)返回某个元素在列表里的索引值。 list.reverse()将整个列表反转。list.sort()对列表排序,默认从小到大,从大到小可以排完序在调用reverse()或list.sort(reverse=True)。list.copu()复制。list.clear()清空列表。
  9. 列表推导式:[表达式 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)
  1. 元组就是有限制的列表,只可读不能任意修改。创建元组用小括号tuple=(1,2,3,4) tuple[1]>>2 .元组的本体其实是逗号。创建单个元素的元组tuple=(1,)#逗号必不可少
  2. 更新和删除元组,虽然元组不能修改但可以通过切片和拼接实现元组的更新。tuple[;2]+(3,)+tuple[2:]
字符串
  1. 字符串就是一种元组,内置方法很多就举几个例子: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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值