-
常用数据类型
从语法角度看,Python和C、C++ 等常用语言最明显的区别就是变量定义的时候无需指定数据类型,变量的类型通过赋值指定,但需要注意的是Python仍然是一门强类型语言,变量一经赋值要变成其他类型必须经过强制类型转换。另一个不同点在于Python代码的强制缩进,通过缩进实现的是C/C++语言中大括号代码块的功能。初接触这一点对熟悉C/C++的人来说相当的别扭,如果使用Python原生的IDLE敲代码出错的可能性相当的高,幸好有PyCharm之类的神器能够辅助我们。
- 数(Number)
- 字符串(String)
- 集合(Set)
- 列表(List)
- 数据字典(Dictionary)
- 元组(Tuple)
- Number
- String
print("hello\nworld!")
hello
world!
print(r"hello\nworld!")
hello\nworld!
var1 = "abcd"
var1[3] = "e"
var1 = "abcdefg"
print(var1[1:])
print(var1[1:2])
print(var1[1:-1])
bcdefg
b
bcdef
- set
var1 = {"1","2","3","1","2"}
print(var1)
{'2', '3', '1'}
var1 = set("abcde")
var2 = set("de11")
#差集
print(var1 - var2)
print(var1.difference(var2))
#并集
print(var1 | var2)
print(var1.union(var2))
#交集
print(var1 & var2)
print(var1.intersection(var2))
#不同时存在于两个集合
print(var1 ^ var2)
print(var1.symmetric_difference(var2))
{'a', 'b', 'c'}
{'a', 'b', 'c'}
{'a', 'c', 'b', '1', 'd', 'e'}
{'a', 'c', 'b', '1', 'd', 'e'}
{'d', 'e'}
{'d', 'e'}
{'a', 'b', '1', 'c'}
{'a', 'b', '1', 'c'}
var1 = set("1234")
var1.add("dell")
print(var1)
var1.update("dell")
print(var1)
输出
{'3', 'dell', '1', '2', '4'}
{'l', 'd', '3', 'dell', '1', '2', 'e', '4'}
移除集合元素使用remove和discard,区别在于前者删除一个不存在的元素时会抛出异常,后者不会。
- List
- 列表通过[]创建,与字符串一样也可以通过下标进行截取。
- 列表通过index(data)获取第一个匹配的数据的位置,注意如果查询不到会抛出异常。
- 列表通过count(data)统计data在列表中出现的次数
- sort()函数可以对list函数进行排序,但是会打乱原始列表的顺序,排序的顺序按照ASCII码,既特殊字符、数字、大写字母、小写字母。如果不想打乱原始List的顺序可以使用sorted(list)产生一个新的列表。
- List通过append和insert进行数据的追加,append固定追加在最后,insert(index,data)在列表的index位置插入数据。
- list有三种删除数据的方法:
- remove(data),删除列表中第一个查找到的data
- del list[index],删除index位置的数据
- pop(index),删除index位置的数据,默认为最后一个
list的拷贝分为浅拷贝和深拷贝两种,深拷贝是完全取得list的一份拷贝,浅拷贝只会将第一层进行完全的拷贝,对于引用类型的数据则只是拷贝了一个地址
- 浅拷贝的三种方式
-
-
list2 = list(list1)
list3 = list1.copy()
list4 = list1[:]
-
-
- 深拷贝
-
list5 =copy.deepcopy(list1)
-
import copy
#浅copy的特点是只会将第一层进行完全的拷贝,对于引用类型的数据则只是拷贝了一个地址
#浅copy的三种方式
list1 = ["beijing","shanghai","shenzhen",["beijing","haiding"]]
list2 = list(list1)
list3 = list1.copy()
list4 = list1[:]
#深拷贝是对所有数据就行了一次完全的拷贝
list5 =copy.deepcopy(list1)
list1[2] = "上海"
list1[3][0] = "北京"
print(list1)
print(list2)
print(list3)
print(list4)
输出如下
['beijing', 'shanghai', '上海', ['北京', 'haiding']]
['beijing', 'shanghai', 'shenzhen', ['北京', 'haiding']]
['beijing', 'shanghai', 'shenzhen', ['北京', 'haiding']]
['beijing', 'shanghai', 'shenzhen', ['北京', 'haiding']]
['beijing', 'shanghai', 'shenzhen', ['beijing', 'haiding']]
extend()函数:用于将一个列表附加到另一个列表之后
list1 = ["1","2","3","2"]
list2 = ["a","b","c"]
list1.extend(list2)
print(list1)
输出:
['1', '2', '3', '2', 'a', 'b', 'c']
- Tuple
- Dictionary
list1 = [1,2,3,4]
#情况1,用于构建数据字典默认值的数据没有嵌套
list2 = ["1","2","3","4"]
#情况2,有嵌套
list3 = [1,["hello"],3]
dic2 = dict.fromkeys(list1,list2)
dic2[2] = "hello"
print(dic2)
dic3 = dict.fromkeys(list1,list3)
dic3[2][1] = "bye"
dic3[2][0] = 6
print(dic3)
输出
{1: ['1', '2', '3', '4'], 2: 'hello', 3: ['1', '2', '3', '4'], 4: ['1', '2', '3', '4']}
{1: [6, 'bye', 3], 2: [6, 'bye', 3], 3: [6, 'bye', 3], 4: [6, 'bye', 3]}
可以看到,如果用于构建默认值的数据是一个嵌套的数据类型的话,所有的值指向了同一块引用,修改时会被同时修改。
items()函数
将数据字典转化为一个列表,列表元素为索引与值构成的列表。
setdefault()函数
检查数据字典是否包含某一个键,如果不包含的话向数据字典插入该键值对(不存在则添加,存在则跳过)。
dic1 = {1:"ab",2:"cd",3:"ef","q":"bye"}
dic2 = {1:"ab",2:"cd",3:"ef","q":"bye"}
dic1.setdefault(1,"kk")
dic2.setdefault(7,"kk")
print(dic1)
print(dic2)
输出
{1: 'ab', 2: 'cd', 3: 'ef', 'q': 'bye'}
{1: 'ab', 2: 'cd', 3: 'ef', 'q': 'bye', 7: 'kk'}
update()函数
检查数据字典是否包含某一个键,如果包含则更新,不包含则添加(不存在则添加,存在则更新)。
dic1 = {1:"ab",2:"cd",3:"ef","q":"bye"}
dic2 = {3:"hello","f":"come"}
dic1.update(dic2)
print(dic1)
输出
{1: 'ab', 2: 'cd', 3: 'hello', 'q': 'bye', 'f': 'come'}
PS:一个强大的字符串转set、list、dict的函数eval
eval函数可以将一个格式正确的字符串转换为一个对应的数据结构,字符串的格式即为该数据结构用print输出的结果。
eval本质是将一个字符串转换为一行代码,功能强大但是存在安全性的问题,具体可参见https://www.cnblogs.com/cxchanpin/p/6882451.html