首页 > 编程语言 >python_基础_数据类型

python_基础_数据类型

时间:2024-07-22 13:57:25浏览次数:16  
标签:... python 数据类型 元素 基础 列表 运算符 strSet print

基础数据类型

  • 不需要声明,只有被赋值后才会创建变量。
  • 变量本身没有类型,“类型”指的是所存值的类型。

类型判断

type(x) 和 isinstance(x, int)
前者不会认为子类是一种他的父类类型
后者会认为子类是父类类型

>>> class A:
...     pass
... 
>>> class B(A):
...     pass
... 
>>> isinstance(A(), A)
True
>>> type(A()) == A 
True
>>> isinstance(B(), A)
True
>>> type(B()) == A
False

类型转换

隐式类型转换

较低级往较高级转换,不会丢失数据

显式类型转换

一些内置函数

数字 Number

类型

  • int 长整型
  • float 浮点型
  • bool 布尔(是int的子类,True1,False0,可以做加减)
  • complex 复数

计算

>>> 5 + 4  # 加法
9
>>> 4.3 - 2 # 减法
2.3
>>> 3 * 7  # 乘法
21
>>> 2 / 4  # 除法,得到一个浮点数
0.5
>>> 2 // 4.0 # 除法,得到一个整数;得到的并不一定是整数类型的数,它与分母分子的数据类型有关系
0.0
>>> 17 % 3.0 # 取余;得到的并不一定是整数类型的数,它与分母分子的数据类型有关系 
2.0
>>> 2 ** 5 # 乘方
32
>>> 17%3.0
2.0
>>> _
2.0
>>> price = 1500
>>> price+_
1502.0
>>> 2//4.0
0.0
>>> _
0.0
>>>

常数

常量描述
pi数学常量 pi(圆周率,一般以π来表示)
e数学常量 e,e即自然常数(自然常数)。

字符串 String

  • 单引号 ' 或者双引号 " 成对括起来的
  • 使用 \ 进行字符串转义,字符串整体前面加 r或者R 则不会转义
  • 使用 + 进行字符串拼接,* 进行字符串重复
  • 没有字符类型(char),只有长度为1的字符串
  • 赋值后不能被改变,即 str='hello' str[0]='m' 会报错

多行

>>> var1 = ''' this is
... a drama
... about something
... ok~ '''
>>> var1
' this is \na drama\nabout something\nok~ '
>>>

'''
这里是代码注释
'''

截取

  • 索引值 从左到右 0~length-1 从右到左 -length ~ -1
  • 包含左边,不包含右边
  • 变量[头下标:尾下标]

格式化

#!/usr/bin/python3
 
print ("我叫 %s 今年 %d 岁!" % ('小明', 10))
# 输出:我叫 小明 今年 10 岁!

布尔 bool

  • 在与其他数据类型进行比较时,会被转换为1/0
  • 运算符:and、or、not

注意: 在 Python 中,所有非零的数字和非空的字符串、列表、元组等数据类型都被视为 True,只有 0、空字符串、空列表、空元组等被视为 False。

列表 List

  • 列表中元素的类型可以各不相同
  • 中括号 []
  • 列表可以嵌套列表
  • 索引值 从左到右 0~length-1 从右到左 -length ~ -1
  • 列表中的元素可以改变(不同于字符串)
  • 有很多内置函数
#!/usr/bin/python3

list = ['Google', 'Runoob', 1997, 2000]

print ("第三个元素为 : ", list[2]) #1997
list[2] = 2001
print ("更新后的第三个元素为 : ", list[2]) #2001

list1 = ['Google', 'Runoob', 'Taobao']
list1.append('Baidu')
print ("更新后的列表 : ", list1) # ['Google', 'Runoob', 'Taobao', 'Baidu']

del list1[2]
print ("更新后的列表 : ", list1) # ['Google', 'Runoob', 'Baidu']

嵌套

>>> a = ['a', 'b', 'c']
>>> n = [1, 2, 3]
>>> x = [a, n]
>>> x
[['a', 'b', 'c'], [1, 2, 3]]
>>> x[0]
['a', 'b', 'c']
>>> x[0][1]
'b'

比较

列表比较需要引入 operator 模块的 eq 方法

# 导入 operator 模块
import operator

a = [1, 2]
b = [2, 3]
c = [2, 3]
print("operator.eq(a,b): ", operator.eq(a,b)) #False
print("operator.eq(c,b): ", operator.eq(c,b)) #True

遍历

# 索引+值
>>> for i, v in enumerate(['tic', 'tac', 'toe']):
...     print(i, v)
...
0 tic
1 tac
2 toe

# 多个数组
>>> questions = ['name', 'quest', 'favorite color']
>>> answers = ['lancelot', 'the holy grail', 'blue']
>>> for q, a in zip(questions, answers):
...     print('What is your {0}?  It is {1}.'.format(q, a))
...
What is your name?  It is lancelot.
What is your quest?  It is the holy grail.
What is your favorite color?  It is blue.

# 反向
>>> for i in reversed(range(1, 10, 2)):
...     print(i)
...
9
7
5
3
1

# 顺序
>>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
>>> for f in sorted(set(basket)):
...     print(f)
...
apple
banana
orange
pear

元组 Tuple

  • 与List类似,但元组内元素不能修改
  • 小括号 ()
  • 能够包含可变的元素
tup1 = ()    # 空元组
tup2 = (20,) # 一个元素,需要在元素后添加逗号
# 区别于
tup_int = (20)

可变?不可变?

元组内的元素是不可变的,但元组变量所指的内存可以变;绑定到新的对象

>>> tup = ('r', 'u', 'n', 'o', 'o', 'b')
>>> tup[0] = 'g'     # 不支持修改元素
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

>>> id(tup)     # 查看内存地址
4440687904
>>> tup = (1,2,3) # 重新赋值
>>> id(tup)
4441088800    # 内存地址不一样了

集合 Set

  • 无序、可变、元素唯一的列表
  • 能够进行交并差等集合运算
  • 大括号 {}

创建

set1 = {1, 2, 3, 4}            # 直接使用大括号创建集合
set2 = set([4, 5, 6, 7])      # 使用 set() 函数从列表创建集合

empSet = set()

注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

运算

>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a                                  
{'a', 'r', 'b', 'c', 'd'}

>>> a - b                              # 集合a中包含而集合b中不包含的元素
{'r', 'd', 'b'}

>>> a | b                              # 集合a或b中包含的所有元素
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}

>>> a & b                              # 集合a和b中都包含了的元素
{'a', 'c'}

>>> a ^ b                              # 不同时包含于a和b的元素
{'r', 'd', 'b', 'm', 'z', 'l'}

操作

>>> strSet = {1,2,3,4,5,6}
>>> strSet.add(7)
>>> strSet
{1, 2, 3, 4, 5, 6, 7}

>>> strSet.update(8)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable

>>> strSet.update([8,9])
>>> strSet
{1, 2, 3, 4, 5, 6, 7, 8, 9}

>>> strSet.remove(3)
>>> strSet
{1, 2, 4, 5, 6, 7, 8, 9}

>>> strSet.discard({9}) # 不会报错
>>> strSet
{1, 2, 4, 5, 6, 7, 8, 9}


# set 集合的 pop 方法会对集合进行无序的排列,然后将这个无序排列集合的左面第一个元素进行删除。
>>> strSet.pop()
1
>>> strSet
{2, 4, 5, 6, 7, 8, 9}
>>> strSet.pop()
2
>>> strSet
{4, 5, 6, 7, 8, 9}
>>> strSet.pop()
4
>>> strSet
{5, 6, 7, 8, 9}

>>> strSet.clear() # 清空
>>> strSet
set()

字典 Dictionary

  • 无序
  • 通过进行存取:key:value
  • 大括号 {}
  • key必须不可变、且唯一,所以不能用列表

创建

# 使用大括号 {} 来创建空字典
emptyDict = {}

# 使用内建函数
emptyDict = dict()

取值

>>> strDict = {'key1':1, 'key2':'2', 3:'123'}

>>> strDict['key1']
1

# 不存在的key访问会报错

清除

tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
 
del tinydict['Name'] # 删除键 'Name'
tinydict.clear()     # 清空字典
del tinydict         # 删除字典
 
print ("tinydict['Age']: ", tinydict['Age']) # 报错

遍历

>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
>>> for k, v in knights.items():
...     print(k, v)
...
gallahad the pure
robin the brave

二进制序列 bytes

  • 元素是0~255间的整数值
  • 常用于处理二进制数据
  • b前缀 / bytes() 函数
x = b"hello"
if x[0] == ord("h"):
    print("The first element is 'h'")

运算符

逻辑运算符

and > or

位运算符

运算符描述实例
&按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0(a & b) 输出结果 12 ,二进制解释: 0000 1100
|按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。(a | b) 输出结果 61 ,二进制解释: 0011 1101
^按位异或运算符:当两对应的二进位相异时,结果为1(a ^ b) 输出结果 49 ,二进制解释: 0011 0001
~按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x 类似于 -x-1(~a ) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。
<<左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。a << 2 输出结果 240 ,二进制解释: 1111 0000
>>右移动运算符:把">>“左边的运算数的各二进位全部右移若干位,”>>"右边的数指定移动的位数a >> 2 输出结果 15 ,二进制解释: 0000 1111

身份运算符

  • isis not 用于判断两个变量引用的是不是同一个地址
  • 效果和 id(x) == id(y) 一样:id() 用于获取对象内存地址

标签:...,python,数据类型,元素,基础,列表,运算符,strSet,print
From: https://blog.csdn.net/AZHOU_princeSS/article/details/140608067

相关文章

  • IPython 使用技巧
    IPython是一个强大的交互式Pythonshell,提供了许多方便的功能,使Python编程更加高效和愉快。本文将介绍一些IPython的实用技巧,帮助开发者充分利用其功能,提高编程效率。1.基本操作和快捷键1.1启动IPython可以通过在终端输入以下命令来启动IPython:ipython启动后,你......
  • 【python】类方法和静态方法的区别
    类方法和静态方法在Python中都可以用来定义与类相关的功能,但它们有不同的使用场景和优缺点。虽然类方法也可以用来实现验证逻辑,但静态方法在某些情况下更合适。让我们详细看看这两种方法的区别以及为什么在某些情况下静态方法可能更适合验证功能。类方法和静态方法的区别类......
  • Python自动化:一键提取千万个Excel指定数据
    一、传统方法的局限性打开每个Excel文件,逐个查找需要的数据。筛选出老板需要的数据列。复制并粘贴到新的工作表中。保存并关闭每个文件。这个过程不仅耗时,而且容易出错。每一次的筛选都可能遗漏数据,每一次的复制粘贴都可能引入错误。二、Python自动化的解决方案i......
  • 基础概念 | DDR的几个概念
    1:什么是RANK?答:CPU与内存之间的接口位宽是64bit,也就意味着CPU在一个时钟周期内会向内存发送或从内存读取64bit的数据。可是,单个内存颗粒的位宽仅有4bit、8bit或16bit,个别也有32bit的。因此,必须把多个颗粒并联起来,组成一个位宽为64bit的数据集合,才可以和CPU互连。生产商把64......
  • Python:提交和跟踪许多子流程会导致“卡住”子流程
    我有一个第3方cli可执行文件,需要从python代码中调用。这些都是繁重的计算(CPU),我需要调用它大约50-100次。可执行文件本身在某种程度上是多线程的,但不是所有步骤,而且我有很多可用的核心。这意味着我希望同时运行多个子进程,但不是全部。因此,我需要提交其中一些,然后跟踪......
  • 无法在 Ubuntu 20.04 中安装 python3-venv,一些损坏的软件包
    这可能很长,但请耐心看完当我在关注这篇文章时尝试安装python3-venvsudoaptinstallbuild-essentiallibssl-devlibffi-devpython3-dev它抛出了以下错误:libffi-devpython3-devReadingpackagelists...DoneBuildingdependencytreeRead......
  • 正则表达式在python爬虫中常用的方法举例
    在爬虫中,正则表达式被广泛用于从网页中提取特定信息。以下是一些常用的正则表达式方法举例,以及它们在爬虫中的典型应用场景:1.提取URLimportreurl_pattern=r'https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+'urls=re.findall(url_pattern,html_content)用于从网页中......
  • 使用 Python XlsxWriter 将 DatePicker 添加到 Excel 单元格中?
    我正在尝试使用PythonXlsxWriter生成的Excel创建输入表单。我想知道是否可以在Excel单元格中添加一个迷你日历(作为DatePicker)供用户输入日期?我偶然发现了Microsoft支持团队提供的本指南插入日期选择器:|||https://support.microsoft.com/en-us/office/......
  • [1037] Python operation of three keys shortcut (pynput)
    Theshortcutof win+shift+leftdoesnotworkwellin pyautogui,butitworkswellin pynput.MovingtheActiveWindowtoaDifferentMonitor: You’reright;PyAutoGUIdoesn’tdirectlysupportmovingwindowsacrossmonitorswiththeeleganceofaswan......
  • 代码随想录算法训练营第36天 | 动态规划基础2:62.不同路径、63.不同路径 II
    62.不同路径https://leetcode.cn/problems/unique-paths/submissions/548656029/代码随想录https://programmercarl.com/0062.不同路径.html63.不同路径IIhttps://leetcode.cn/problems/unique-paths-ii/description/代码随想录https://programmercarl.com/0063.不同路径......