1、is和==
==
比较的对象是变量的值is
比较的对象是内存地址id(variable)
返回变量的内存地址
In [34]: num1 = 1000
In [35]: num2 = 1000
In [36]: num1 == num2
Out[36]: True
In [37]: num1 is num2
Out[37]: False
- 小数据池(在终端中规则一致)
- 数字范围为-5~256时,所有变量地址相同(该数值范围在不同IDE不一定相同)
- 字符串中如果有特殊字符,则两个相同字符串地址不同(同样在不同IDE中结论不同)
- 字符串单个*20以内则地址相同
In [26]: num1 = 10
In [27]: num2 = 10
In [28]: num1 == num2
Out[28]: True
In [29]: num1 is num2
Out[29]: True
In [30]: s1 = 'aaa'
In [31]: s2 = 'aaa'
In [32]: s1 == s2
Out[32]: True
In [33]: s1 is s2
Out[33]: True
2、解构
-
字符串,元组,列表均可解构
-
例子:
In [38]: s = '123' In [39]: n1, n2, n3 = s In [40]: print(n1,n2,n3) 1 2 3
- 其它类型解构也一样,注意元素个数的匹配,必须相同
3、类型转换
-
类型转换的函数为
int(), str(),...
-
bool()
转换的内容为空时为false,对于非空的东西均为trueIn [41]: n = 0 # int类型的0表示空 In [42]: s1 = ' ' In [43]: s2 = '' In [44]: l = [] In [45]: bool(n) Out[45]: False In [46]: bool(s1) Out[46]: True In [47]: bool(s2) Out[47]: False In [48]: bool(l) Out[48]: False
4、其它
-
字符串和列表的互相转换:
join和split
In [50]: '**'.join(['a', 'b', 'c']) Out[50]: 'a**b**c' In [51]: 'a**b**c'.split('**') # 当不加参数时,默认为以空格为分隔符 Out[51]: ['a', 'b', 'c']
- join()的对象是可迭代对象,在可迭代对象的各个元素间添加指定的字符串
-
列表删除
-
lis.clear()
-
for + lis.remove(element)
-
注意:在迭代中使用remove时,每删除一个元素,列表的元素索引都会改变,即直接使用
for+remove无法遍历到所有元素,正确迭代删除列表的例子如下list1 = [1, 2, 3, 4] new_list = [] for ele in list1: new_list.append(ele) for ele in new_list: list1.remove(ele)
- 先用一个新列表记录原列表,再迭代新列表,通过新列表来改变原列表的内容(因为这样改变的是原列表的内容,但迭代的是新列表,所以新列表的索引不会改变,就不会出错)
-
-
字典的知识补充
-
字典在循环自己是不允许改变字典的长度(增删)
-
fromkeys直接使用类名对字典访问,不会对原字典产生影响,返回一个新字典
- 注意:fromkeys的第二个变量是通过地址访问,即新返回的字典的value都指向同一个列表
In [52]: ret = dict.fromkeys("123", [1, 2, "a"]) In [53]: ret Out[53]: {'1': [1, 2, 'a'], '2': [1, 2, 'a'], '3': [1, 2, 'a']} In [54]: id(ret['1']) == id(ret['2']) == id(ret['3']) Out[54]: True
-