Python基础(1)——变量和数据类型[xiaoshun]
目录
一、变量
1.概述
Variables are used to store information to be referenced(引用)and manipulated(操作) in a computer program.
2.声明
(1)命名规则
- 变量名只能是字母、数字或下划线的任意组合;
- 第一个不能是数字
- 关键字不能作为变量名
(2)定义
name1 = 'Lu'
name2 = name1
name1 = 'MJJ'
print(name1, name2) -->:
MJJ Lu
(3)删除
name1 = 'Lu'
del name1
print(name1) -->:
NameError: name 'name1' is not defined
变量的生命周期:无指向时,才会在内存中被回收。
二、数据类型
1.数字
(1)分类
Python 支持三种不同的数值类型:
- 整型(Int) : 不带小数点。Python3 整型是没有限制大小的,可以当作 Long 类型使用,Python3 没有 Python2 的 Long 类型;
- 浮点型(float):浮点型由整数部分与小数部分组成,浮点型也可以使用科学计数法表示(2.5e2 = 2.5 x 102 = 250);
- 复数( (complex)) - 复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型。
(2)类型转换
- int(x) 将x转换为一个整数。
- float(x) 将x转换到一个浮点数。
- complex(x) 将x转换到一个复数,实数部分为 x,虚数部分为 0。
- complex(x, y) 将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。x 和 y 是数字表达式。Python中复数不支持强转,但可以通过real和image方法获取到实部和虚部的值。
(3)运算
不同类型的数混合运算时会将整数转换为浮点数。
- /:总是返回一个浮点数。
- //:得到的并不一定是整数类型的数,它与分母分子的数据类型有关系。
7 // 2=3, 7.0 // 2=3.0,7 // 2.0=3.0
- **:幂运算。
- %:取余。
在交互模式中,最后被输出的表达式结果被赋值给变量 "_"。“_”应该为只读变量。
(4)数学函数
- abs(x):返回数字的绝对值,如abs(-10) 返回 10。
- max(x1, x2,...) :返回给定参数的最大值,参数可以为序列。
- min(x1, x2,...) :返回给定参数的最小值,参数可以为序列。
- pow(x, y):x**y 运算后的值。
- sqrt(x) :返回数字x的平方根。
(5)随机数函数
2.字符串
(1)切片,索引,拼接
str[a:b],str[a:b:c]
- a,b为参数。从字符串指针为a的地方开始截取字符,到b的前一个位置(因为不包含b);
- 如果a,b均不填写,默认取全部字符;
- 如果a填写,b不填写(或填写的值大于指针下标),默认从a开始截取,至字符串最后一个位置;
- 如果a不填写, b填写,默认从0位置开始截取,至b的前一个位置;
- 如果a为负数,默认从尾部某一位置,开始向后截取,最后一个位置为-1
- 如果a>=b, 默认输出为空。
- [a:b:c] 表示的是从头到尾,步长为c。第一个冒号两侧的数字是指截取字符串的范围,第二个冒号后面是指截取的步长。
- [::-1]:字符串倒序
万恶的字符串拼接:
python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间。
字符串是一种不可变数据类型,不可以改变。可以用截取的方式,拼接的方式重新组合成新的字符串。
str1[0] = "H"
TypeError: 'str' object does not support item assignment.
(2)转义
- \(在行尾时):续行符。代码过长时,可以用续航符进行换行编写,且续行符之后,续行符后面什么都不能 出现(包括空格),必须换行(必须换行写内容)
a = "ajkfhajkfhkjahfkahfkhakfhkdafafafaddafafdafafadfafafafafafadefgg" \
"hfakjfhkah"
- \\ 反斜杠符号,\' 单引号,\" 双引号:
print(str1 + "\\")print("\'" + str1 + "\'")
- \a 响铃,命令行交互模式中可以实现。
- \b 退格(Backspace),\000 空,\n 换行,等
(3)运算
- “+”:拼接
- “str*number”:重复输出number次str
- []:获取索引
- [:]:截取,切片,左闭右开
- in,not in :成员逻辑运算符
- R/r:原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符,引入文件路径时常用。
print(r"hello \' word!")
print("hello \' word!")
(4)格式化输出
%和format()函数使用、f-string字面量格式化字符串,是新的格式化字符串的语法。
(5)字符串操作
- str.capitalize(),无参数,将字符串的第一个字符转换为大写,其余转换成小写。首字符为非字母,则不转换,其余转为小写。
- str.center(width[, fillchar]),返回一个指定宽度且原str居中的新字符串,fillchar 为填充的单个字符,默认为空格。
参数:width,宽度;fillchar,能且只能为一个字符。
注意:
a、如果 width 小于字符串宽度直接返回字符串,不会截断;
b、fillchar 只能是单个字符。
- str.count(sub[, start= 0][,end=len(string)]),统计子字符串sub里某个字符串出现的次数。可选参数为在字符串搜索的开始(默认为0)与结束位置(默认为len(string))。
str1 ='python' * 3
print(str1.count('p'))
print(str1.count('p', 1)) # 包含起始位置
print(str1.count('p', 1, -6)) # 不包含结束位置 -->:
3
2
1
- str.join(sequence),将序列seq中的元素以指定的字符串str连接返回一个新的字符串。
参数:seq,元组、列表、字典、字符串。字典只能连接键值key。
str1 = '\t'
str2 = 'python'
list1 = [i*2 for i in str2]
print(str1.join(str2))
print(str1.join(list1)) -->:
p y t h o n
pp yy tt hh oo nn
- str.split(str="", num=string.count(str)),指定分隔符对字符串进行切片。常用作数据的分析提取。
参数:str,分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等;num,分割次数。默认为 -1, 即分隔所有,分割为 num+1 个子字符串。
返回值:元素为字符串的列表。
爬虫时,图片名获取:
url_str = "http://www.baidu.com/python/image/123456.jpg"
print(url_str.split('/')[-1]) -->:
123456.jpg
- str.strip([chars]),移除字符串头尾指定的字符(默认为空格)或字符序列chars,返回新字符串。
注意:
a、该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
b、如果不带参数,默认是清除两边的空白符,例如:/n, /r, /t, ' '等
str1 = '\tpython\t' * 3
print(str1.strip()) -->:
python python python
c、带有参数的时候,这个参数可以理解一个要删除的字符的列表,删除多个字符时,只要头尾有对应其中的某个字符即 删除,不考虑顺序,直到遇到第一个不包含在其中的字符为止。
str1 = 'a111123\t132231b213321312==3213122132*31123132'
print(str1.strip('123ab\t'))
# 等价于
for i in str1:
if i in '123ab\t':
str1 = str1.strip(i) -->:
==3213122132*
- (待补充)
3.列表
(1)基况
列表元素类型可以不一致,和C数组不一样(类似ndarray)。列表元素可以修改,所以做列表有关操作时,要注意原列表的元素是否被更改了(深浅拷贝!!!)。
list1 = [i for i in range(10)]
list2 = list1 # list2 = list1.copy()
print(list1, list2)
list2[0] = 100
print(list1, list2) -->:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[100, 1, 2, 3, 4, 5, 6, 7, 8, 9] [100, 1, 2, 3, 4, 5, 6, 7, 8, 9]
(2)基操
- 下标索引查找或者更改(列表可变)
- 截取、切片:[:];间隔截取:[:::]
- 拼接组合:“+”;重复:“*”
- 成员逻辑判断:in;not in
(3)列表嵌套
不支持花切,只能分层操作。
list1 = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
print(list1[1:][:])
print(list1[[0], [0]]) -->:
TypeError: list indices must be integers or slices, not tuple
[[4, 5, 6], [7, 8, 9]]
(4)常见内建函数和列表方法
内建函数:
- len(list),返回列表元素个数
- min/max(list),返回列表最小值/最大值
元素全部为数字类型时,直接根据值的大小比较。当其中的元素全部为字符串类型(string)时,则比较的是每个字符串元素的第一个字符的 ASCII 的大小。
- list(seq),将元组或字符串转换成列表。
str1 = "python"
tup1 = ('1', '2', '3')
dict1 = {'a': 1, 'b': 2, 'c': 3}
print(list(str1)) # 每个字符循环一遍,类似列表生成式
print(list(tup1))
print(list(dict1)) # 默认为KEY
print(list(dict1.values())) -->:
['p', 'y', 't', 'h', 'o', 'n']
['1', '2', '3']
['a', 'b', 'c']
[1, 2, 3]
- enumerate(list),以(index, value)小元组形式返回列表的下标和下标对应的值。
list1 = [i for i in range(10)]
for index, value in enumerate(list1):
print(index, value) -->:
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
- 待补充
list对象的方法:
- list.append(obj),在列表末尾添加新的对象,返回值为None,修改原列表。假若不希望原列表被改,记得先copy()。
list1 = [i for i in range(10)]
list2 = list1.append(10)
print(list2, type(list2), list1) -->:
None <class 'NoneType'> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- list.count(obj),返回某个元素在列表中出现的次数。不可以像str.count()指定搜索区间,搜索整个列表。
- list.extend(seq),在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表),无返回值。list.append()的循环加强版。
参数:
seq-- 可以是列表、元组、集合、字典,若为字典,则仅会将键(key)作为元素依次添加至原列表的末尾。
- list.index(x[, start[, end]]),返回X在列表中第一次匹配到的索引。如果没找到,则抛出异常!
参数:
x-- 查找的对象。
start-- 可选,查找的起始位置。
end-- 可选,查找的结束位置。
- list.insert(index, obj),将指定对象插入列表的指定位置,无返回值,在原列表操作修改。
- list.pop([index=-1]),移除列表中的一个元素(默认最后一个元素,不能超过len(list),否则抛异常!),并且返回该元素的值。在原列表操作删除。
- list.remove(obj),移除列表中某个值的第一个匹配项,无返回值。在原列表操作删除。无法指定匹配区间。
删除重复元素,不要用由前到后for循环。因为删除一个后,后面的元素回向前补齐,而循环下标还是会正常加1,会导致后面的循环下标与元素不对应。
方法一:从后往前[::-1]循环开始删除。
方法二:用Python原生态方法,现用set()列表变成集合(集合唯一性),再用list()将集合变成列表。
list1 = [1, 2, 'a', 'l', 'a', 1, 1, 2, 3]
set1 = set(list1)
list1 = list(set1)
print(list1) -->:
[1, 2, 3, 'l', 'a']
- ist.reverse(),翻转180°,无返回值。
- list.sort( key=None, reverse=False),排序。无返回值,原列表操作。默认reverse=False升序。
- 待补充
4.元组
(1)基况
与列表类似,但元素不能修改,又叫只读列表。和str一样,操作都会生成新的元组。
(2)基操
- 下标索引访问查找
- 截取、切片、间隔截取[:::]访问
- 拼接组合:“+”;重复:“*”
- 成员逻辑判断:in;not in
(3)常见内建函数及方法
函数:
- len()、max()、min()
- tuple(iterable):将可迭代系列转换为元组。
方法:(只有两个,因为元组不可变)
- count()
- index()
(4)元组注意事项
a、元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用:
Tuple1 =(3)--》<class 'int'>Tuple = (3,)--》<class 'tuple'>
b、tuple的元素值是不允许删除的,但我们可以使用del语句来删除整个元组。
c、tuple中的“不变”,指的是“指向不变”,但是指向里面的内容是可以变的。
tuple1 = ([1, 2, 3, 9, 5], [1, 1, 2, 3], 100)
tuple1[0][0] = 100
print(tuple1) -->:
([100, 2, 3, 9, 5], [1, 1, 2, 3], 100)
5.字典
(1)基况
字典是另一种可变容器模型,且可存储任意类型对象。key-value键值对形式。
(2)键和值
- 键值必须唯一,值不必,但同一个键值被赋值两次,后一次赋值会被记住;
- 值可以是任何数据类型(标准的、用户自定义的),但键值必须是不可变的数据类型:字符串、元组、数字;
- 对字典操作,一般通过键值(特殊的索引)进行操作:读取、修改、新增、删除等
- 通过键值对字典进行逻辑操作:key in/not in dict
(3)常见内建函数和方法
函数:
- len(dict),计算字典元素个数,即键的总数。
方法:
- dict.clear(),清空字典内所有元素,字典不会被删除,无返回值无参数。
- dict.copy(),返回一个字典的浅拷贝。
dict1 = {'name': ['lu', 'mjj'], 'age': [18, 16], 'sex': ['man', 'wom']}
dict2 = dict1.copy() # 深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用
dict2['name'][0] = 'LU__' # 子对象为引用
dict2['age'] = [100, 16] # 父对象为拷贝
print(dict2)
print(dict1) -->:
{'name': ['LU__', 'mjj'], 'age': [100, 16], 'sex': ['man', 'wom']}
{'name': ['LU__', 'mjj'], 'age': [18, 16], 'sex': ['man', 'wom']}
深拷贝需要用到copy模块的deepcopy()函数,copy.deepcopy(dict)
- dict.fromkeys(seq[, value]),创建一个值全一样的字典。不同的key对应一样的value。
参数:
seq,序列中的元素为字典的键值
value,默认为None。
dict1 = {'name': ['lu', 'mjj'], 'age': [18, 16], 'sex': ['man', 'wom']}
dict2 = dict1.fromkeys('NAME')
dict3 = dict.fromkeys([1, 2, 3], [10, 10])
print(dict2)
print(dict3)
print(dict1) -->:
{'N': None, 'A': None, 'M': None, 'E': None}
{1: [10, 10], 2: [10, 10], 3: [10, 10]}
{'name': ['lu', 'mjj'], 'age': [18, 16], 'sex': ['man', 'wom']}
- dict.get(key, default=None),返回指定键值对应的值,如果键值不在字典中返回默认值None。
- dict.items(),以列表形式(并非直接的列表(dict_items迭代对象),若要返回列表值还需调用list函数)返回可遍历的(键, 值) 元组数组,参数无。
dict1 = {'name': ['lu', 'mjj'], 'age': [18, 16], 'sex': ['man', 'wom']}
dict1_item = dict1.items()
print(dict1_item)
print(type(dict1_item))
print(list(dict1_item))
print(list(dict1)) # 只得到键值列表
for i, j in dict1_item:
print(i, j) -->:
dict_items([('name', ['lu', 'mjj']), ('age', [18, 16]), ('sex', ['man', 'wom'])])
<class 'dict_items'>
[('name', ['lu', 'mjj']), ('age', [18, 16]), ('sex', ['man', 'wom'])]
['name', 'age', 'sex']
name ['lu', 'mjj']
age [18, 16]
sex ['man', 'wom']
- dict.keys(),返回一个可遍历可迭代对象dict_kys,可以使用 list() 来转换为列表。参数无,返回一个迭代器。pthon2.x直接返回一个列表。
dict1 = {'name': ['lu', 'mjj'], 'age': [18, 16], 'sex': ['man', 'wom']}
for i in dict1.keys():
print(i)
- dict.setdefault(key, default=None),和 get()方法 类似, 如果键不已经存在于字典中,将会添加键并将值设为默认值。
dict1 = {'name': ['lu', 'mjj'], 'age': [18, 16], 'sex': ['man', 'wom']}
print(dict1.setdefault('name'))
print(dict1.setdefault('birthday', ['1995-8-6', '1995-3-9']))
print(dict1) -->:
['lu', 'mjj']
['1995-8-6', '1995-3-9']
{'name': ['lu', 'mjj'], 'age': [18, 16], 'sex': ['man', 'wom'], 'birthday': ['1995-8-6', '1995-3-9']}
- dict.update(dict2),把字典参数 dict2 的 key/value(键/值) 对更新到字典 dict 里,无返回值。
dict1 = {'name': ['lu', 'mjj'], 'age': [18, 16], 'sex': ['man', 'wom']}
dict2 = {'birthday': ['1995-8-6', '1995-3-9']}
print(dict1.update(dict2))
print(dict1) -->:
None
{'name': ['lu', 'mjj'], 'age': [18, 16], 'sex': ['man', 'wom'], 'birthday': ['1995-8-6', '1995-3-9']}
- dict.values(),返回一个迭代器,可以使用 list() 来转换为列表,列表为字典中的所有值。
- pop(key[,default]),删除字典给定键 key 所对应的值,返回值为被删除的值,并修改原字典。key值必须给出。 否则,返回default值。
- popitem(),返回并删除字典中的最后一对键和值。返回一个键值对(key,value)形式,无参数。
6.集合
集合(set)是一个无序的不重复元素序列。两个重要作用:
去重:把列表变成集合即可
关系测试:测试两组数据之前的交集、差集、并集等
8.byte
字节流。有些时候(网络通信)参数传递必须以字节流形式传参。
- str.encode(),编码,str to byte。
- b.decode(),解码,byte to str。
9.json
Python基础(1)——变量和数据类型[xiaoshun]的更多相关文章
- python基础之变量与数据类型
变量在python中变量可以理解为在计算机内存中命名的一个存储空间,可以存储任意类型的数据.变量命名变量名可以使用英文.数字和_命名,且不能用数字开头使用赋值运算符等号“=”用来给变量赋值.变量赋值等 ...
- Java编程基础——常量变量和数据类型
Java编程基础——常量变量和数据类型 摘要:本文介绍了Java编程语言的常量变量和数据类型. 常量变量 常量的定义 一块内存中的数据存储空间,里面的数据不可以更改. 变量的定义 一块内存中的数据存储 ...
- python基础之五大标准数据类型
学习一门语言,往往都是从Hello World开始. 但是笔者认为,在一个黑框框中输出一个"你好,世界"并没有什么了不起,要看透事物的本质,熟悉一门语言,就要了解其底层,就是我们常 ...
- Python 基础之一变量和赋值
变量:程序在运行的时候会用到很多临时存储数据,这个时候就用到了变量,临时数据的名字. Python中变量不需要声明,直接可以使用,变量的数据类型由赋值确定. >>> name=&qu ...
- Python基础语法,基本数据类型及相关操作
---恢复内容开始--- python文件 文件开头要有 #!/usr/bin/ python --在linux中是告诉系统phthon的路径是在/usr/bin/ python目录下 ...
- python中的变量和数据类型
一.变量定义:变量是计算机内存中的一块区域,存储规定范围内的值,值 可以改变,通俗的说变量就是给数据起个名字. 二.变量命名规则: 1. 变量名由字母.数字.下划线组成 2. 数字不能开头 3. 不可 ...
- Python自动化开发-变量、数据类型和运算
一.变量 变量定义:Variables are used to store infomation to referrenced and manipulated in a computer progra ...
- python基础(2)---数据类型
1.python版本间的差异: 2.x与3.x版本对比 version 2.x 3.x print print " "或者print()打印都可以正常输出 只能print()这种形 ...
- python基础3 - 变量的基本使用和命名
4.变量的基本使用 4.1 变量定义 在 Python 中,每个变量 在使用前都必须赋值,变量 赋值以后 该变量 才会被创建 等号(=)用来给变量赋值 = 左边是变量名 = 右边是存储在变量中的值 变 ...
- day03-执行python方式、变量及数据类型简介
目录 执行Python程序的两种方式 1. 第一种:交互式 2. 第二种:命令式 3. Python执行程序的三个阶段 变量 变量 什么是变量 Python中的变量 变量名的命名规范 内存管理 定义变 ...
随机推荐
- 阿里云 MaxCompute(ODPS)
大数据产品架构 BASE - Dataworks ODPS - MaxCompute ODPS 功能组成(Open Data Process Service) ODPS 是旧称,阿里云公有云服务中现称 ...
- Shell 元字符 & 变量
Shell 介绍 ## 什么是程序 程序就是一组数据和代码逻辑集合的文件 ## 什么是进程 进程是程序的运行过程,也可以说是操作系统干活的过程,因为是操作系统负责控制硬件来运行应用程序 ps:进程与进 ...
- 康托展开:对全排列的HASH和还原,判断搜索中的某个排列是否出现过
题目:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=2297 前置技能:(千万注意是 ...
- MATLAB字符串分解, 合并
% 分解 % regexp s = 'ab/c/d.png' file_name = regexp(s, '/', 'split'); % 'd.png' % split fractions = sp ...
- JavaScript for, for...in, for...of, for-await...of difference All In One
JavaScript for, for...in, for...of, for-await...of difference All In One for for...in for...of for-a ...
- HTML5 动画效果的多种实现方式
HTML5 动画效果的多种实现方式 1. CSS3 transform + transition https://www.w3.org/TR/css-transforms-1/ https://ww ...
- 如何禁用 Chrome Taps Group feature 💩
如何禁用 Chrome Taps Group feature bug https://support.google.com/chrome/go/feedback_confirmation How to ...
- PEP 8 & Style Guide
PEP 8 & Style Guide Style Guide for Python Code https://www.python.org/dev/peps/pep-0008/ PEP Py ...
- bye MVA
bye MVA https://mva.microsoft.com/
- DENIEL SOIBIM:如何保持坚持
丹尼尔·索比姆作为加州理工高材生,在2005年通过创建投资俱乐部对潜力公司进行天使投资,获得了美国Blue Run高层的重视,并相继担任Blue Run潜力营收专家评估师,2009年成为星盟集团的副总 ...