python篇-基础知识1

丢弃小数部分的整除

>>> 1 // 2
> 0
>>> 1 // 1
> 1
>>> 5.0 // 2.4
> 2.0

整除还能对浮点数进行

取余

下面介绍不好理解的

>>> 10 % -3
> -2
>>> -10 % 3
> 2
>>> -10 % -3
> -1

通过研究与之配套的整除运算可帮助理解

即先整除,然后减去
-10 // -3 为 3.3333 取整(注意取整为向下取整,-3.3变整数后即为-4)变为3,则再取余就为-1

同理10%-3为-2,-10%3为2

乘方

这里值得注意的地方就是乘方运算符**的优先级比求负的优先级高,因此-3**2等价于-(3**2)。

获取用户输入

>>> x = input("x:")
>x: 34
>>> y = input("y:")
>y: 42
>>> print(int(x)*int(y))
>1428

内置函数

  • round和//

round()是圆整到最接近的整数,并在两个整数一样近时圆整到偶数。
//是向下圆整
直接对于一个数的向下圆整可以用math模块中的floor

math模块

  • floor

直接对数字进行向下取整

  • ceil

直接对数字进行向上取整

cmath模块

专门处理复数的模块

问题

当默认打开程序为python.exe的时候,双击运行后会直接闪一下就退出了,要在程序的末尾加上input(Press <enter>)即可

输出时转换成字符串的不同机制

  • str

对符号进行解释

  • repr

保持原来内容

>>>print(repr("hello,\nworld"))
> 'hello,\nworld'
>>>print(str("hello,\nworld"))
>hello,
>world

长字符串、原始字符串和字节

  • 长字符串

要表示很长的字符串(跨越多行的字符串),可以使用三引号

print('''This is a very long string.It continues here.
And it's not over yet."hello,world"
Still here.''')

example

  • 原始字符串

原始字符串不会对反斜杠做特殊处理,而是让字符串包含的每个字符都保持原样

>>> print(r'C:\nowhere')
>>> print(r'C:\Program Files\fnord\foo\bar\baz\frozz\bozz')

列表(list)和元组(tuple)

  • 区别

列表是可以修改的,元组不能修改

列表是同构的,元组是异构的

同构 与 异构:tuple 用于存储异构(heterogeneous)数据,当做没有字段名的记录来用,比如用 tuple 来记录一个人的身高、体重、年龄。而列表一般用于存储同构数据(homogenous),同构数据就是具有相同意义的数据,雅思考试内容比如下面的都是字符串类型

容器

Python支持一种数据结构的基本概念,名为容器(container)。容器基本上就是可包含其他对象的对象。两种主要的容器是序列(如列表和元组)和映射(如字典)。在序列中,每个元素都有编号,而在映射中,每个元素都有名称(也叫键)。有一种既不是序列也不是映射的容器,它就是集合(set)

通用的序列操作

索引

对于字符串字面量(以及其他的序列字面量),可直接对其执行索引操作,无需先将其赋给
变量。这与先赋给变量再对变量执行索引操作的效果是一样的。

>>> 'Hello'[1] 
'e'

如果函数调用返回一个序列,可直接对其执行索引操作。例如,如果你只想获取用户输入的年份的第4位,可像下面这样做:

>>> fourth = input('Year: ')[3] 
Year: 2005 
>>> fourth 
'5' 

切片

除使用索引来访问单个元素外,还可使用切片(slicing)来访问特定范围内的元素。为此,
可使用两个索引,并用冒号分隔:

>>> tag = '<a href="http://www.python.org">Python web site</a>' 
>>> tag[9:30] 
'http://www.python.org' 
>>> tag[32:-4] 
'Python web site'

其中第一个索引指定的元素包含在切片内,但第二个索引指定的元素不包含在切片内。
###绝妙的简写
假设你要访问前述数字列表中的最后三个元素,显然可以明确地指定这一点。

>>> numbers[7:10] 
[8, 9, 10]

在这里,索引10指的是第11个元素:它并不存在,但确实是到达最后一个元素后再前进一步
所处的位置。明白了吗?如果要从列表末尾开始数,可使用负数索引。

>>> numbers[-3:-1] 
[8, 9]

然而,这样好像无法包含最后一个元素。如果使用索引0,即到达列表末尾后再前进一步所
处的位置,结果将如何呢?

>>> numbers[-3:0] 
[] 

结果并不是你想要的。事实上,执行切片操作时,如果第一个索引指定的元素位于第二个索
引指定的元素后面(在这里,倒数第3个元素位于第1个元素后面),结果就为空序列。好在你能
使用一种简写:如果切片结束于序列末尾,可省略第二个索引。

>>> numbers[-3:] 
[8, 9, 10]

同样,如果切片始于序列开头,可省略第一个索引。

>>> numbers[:3] 
[1, 2, 3]

实际上,要复制整个序列,可将两个索引都省略。

>>> numbers[:] 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

更大的步长

执行切片操作时,你显式或隐式地指定起点和终点,但通常省略另一个参数,即步长。在普
通切片中,步长为1。这意味着从一个元素移到下一个元素,因此切片包含起点和终点之间的所
有元素。

>>> numbers[0:10:1] 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

在这个示例中,指定了另一个数。你可能猜到了,这显式地指定了步长。如果指定的步长大
于1,将跳过一些元素。例如,步长为2时,将从起点和终点之间每隔一个元素提取一个元素。

>>> numbers[0:10:2] 
[1, 3, 5, 7, 9] 
numbers[3:6:3] 
[4] 

显式地指定步长时,也可使用前述简写。例如,要从序列中每隔3个元素提取1个,只需提供
步长4即可。

显式地指定步长时,也可使用前述简写。例如,要从序列中每隔3个元素提取1个,只需提供
步长4即可。

当然,步长不能为0,否则无法向前移动,但可以为负数,即从右向左提取元素。

>>> numbers[8:3:-1] 
[9, 8, 7, 6, 5] 
>>> numbers[10:0:-2] 
[10, 8, 6, 4, 2] 
>>> numbers[0:10:-2] 
[] 
>>> numbers[::-2] 
[10, 8, 6, 4, 2] 
>>> numbers[5::-2] 
[6, 4, 2] 
>>> numbers[:5:-2] 
[10, 8]

在这种情况下,要正确地提取颇费思量。如你所见,第一个索引依然包含在内,而第二个索
引不包含在内。步长为负数时,第一个索引必须比第二个索引大。可能有点令人迷惑的是,当你
省略起始和结束索引时,Python竟然执行了正确的操作:步长为正数时,它从起点移到终点,而
步长为负数时,它从终点移到起点。

相加

可使用加法运算符来拼接序列。

>>> [1, 2, 3] + [4, 5, 6] 
[1, 2, 3, 4, 5, 6] 
>>> 'Hello,' + 'world!' 
'Hello, world!' 
>>> [1, 2, 3] + 'world!' 
Traceback (innermost last): 
 File "<pyshell>", line 1, in ? 
 [1, 2, 3] + 'world!' 
TypeError: can only concatenate list (not "string") to list

从错误消息可知,不能拼接列表和字符串,虽然它们都是序列。一般而言,不能拼接不同类
型的序列。

相乘

将序列与数x相乘时,将重复这个序列x次来创建一个新序列

>>> 'python' * 5 
'pythonpythonpythonpythonpython' 
>>> [42] * 10 
[42, 42, 42, 42, 42, 42, 42, 42, 42, 42]

None、空列表和初始化

空列表是使用不包含任何内容的两个方括号([])表示的。如果要创建一个可包含10个元素
的列表,但没有任何有用的内容,可像前面那样使用[42]*10。但更准确的做法是使用[0]*10,
这将创建一个包含10个零的列表。然而,在有些情况下,你可能想使用表示“什么都没有”的值,
如表示还没有在列表中添加任何内容。在这种情况下,可使用None。在Python中,None表示什么
都没有。因此,要将列表的长度初始化为10,可像下面这样做:

>>> sequence = [None] * 10 
>>> sequence 
[None, None, None, None, None, None, None, None, None, None]

成员资格检查

检查特定的值是否包含在序列中,可使用运算符in。这个运算符与前面讨论的运算符(如
乘法或加法运算符)稍有不同。它检查是否满足指定的条件,并返回相应的值:满足时返回True,
不满足时返回False。这样的运算符称为布尔运算符,而前述真值称为布尔值。

>>> permissions = 'rw' 
>>> 'w' in permissions 
True 
>>> 'x' in permissions 
False 
>>> users = ['mlh', 'foo', 'bar'] 
>>> input('Enter your user name: ') in users 
Enter your user name: mlh 
True 
>>> subject = '$$$ Get rich now!!! $$$' 
>>> '$$$' in subject 
True

长度、最小值和最大值

内置函数len、min和max很有用,其中函数len返回序列包含的元素个数,而min和max分别返回序列中最小和最大的元素

>>> numbers = [100, 34, 678] 
>>> len(numbers) 
3 
>>> max(numbers) 
678 
>>> min(numbers)
>34 
>>> max(2, 3) 
3 
>>> min(9, 3, 2, 5) 
2 

列表:Python的主力

列表是可变的,另外,列表还有很多特有的方法

函数list

鉴于不能像修改列表那样修改字符串,因此在有些情况下使用字符串来创建列表很有帮助。为此,可使用函数list

>>> list('Hello') 
['H', 'e', 'l', 'l', 'o']

请注意,可将任何序列(而不仅仅是字符串)作为list的参数
要将字符列表转换为字符串,可使用下面的表达式:

''.join(somelist)
#其中somelist是要转换的列表

基本的列表操作

给列表元素赋值

使用索引赋值即可

删除元素

使用del语句即可

>>> names = ['Alice', 'Beth', 'Cecil', 'Dee-Dee', 'Earl'] 
>>> del names[2] 
>>> names 
['Alice', 'Beth', 'Dee-Dee', 'Earl'] 

给切片赋值

切片是一项极其强大的功能,而能够给切片赋值让这项功能显得更加强大。

>>> name = list('Perl') 
>>> name 
['P', 'e', 'r', 'l'] 
>>> name[2:] = list('ar') 
>>> name 
['P', 'e', 'a', 'r']

从上述代码可知,可同时给多个元素赋值。你可能认为,这有什么大不了的,分别给每个元
素赋值不是一样的吗?确实如此,但通过使用切片赋值,可将切片替换为长度与其不同的序列。

>>> name = list('Perl') 
>>> name[1:] = list('ython') 
>>> name 
['P', 'y', 't', 'h', 'o', 'n']

使用切片赋值还可在不替换原有元素的情况下插入新元素。

>>> numbers = [1, 5] 
>>> numbers[1:1] = [2, 3, 4] 
>>> numbers 
[1, 2, 3, 4, 5] 

在这里,我“替换”了一个空切片,相当于插入了一个序列。你可采取相反的措施来删除
切片。

>>> numbers 
[1, 2, 3, 4, 5] 
>>> numbers[1:4] = [] 
>>> numbers 
[1, 5]

列表方法

  • append

方法append用于将一个对象附加到列表末尾。

>>> lst = [1, 2, 3] 
>>> lst.append(4) 
>>> lst 
[1, 2, 3, 4]

另外请注意,与其他几个类似的方法一样,append也就地修改列表。这意味着它不会返回修
改后的新列表,而是直接修改旧列表

  • clear

就地清空列表的内容

>>> lst = [1, 2, 3] 
>>> lst.clear() 
>>> lst 
[]
  • copy

复制表,常规复制只是将另一个名称关联到列表,而copy会返回一个副本

>>> a = [1,2,3]
>>> b = a
>>> b[1] = 4
>>> a
[1,4,3]

要让a和b指向不同的列表,就必须将b关联到a的副本

>>> a = [1,2,3]
>>> b = a.copy()
>>> b[1] = 4
>>> a
[1,2,3]

这类似于使用a[:]或list(a),他们也都复制a

  • count

计算指定的元素在列表中出现了多少次

>>> ['to', 'be', 'or', 'not', 'to', 'be'].count('to') 
2 
>>> x = [[1, 2], 1, 1, [2, 1, [1, 2]]] 
>>> x.count(1) 
2 
>>> x.count([1, 2]) 
1 
  • extend

extend让你能够同时将多个值附加到列表末尾,为此可将这些值组成的序列作为参数提供给方法extend。换而言之,你可使用一个列表来扩展另一个列表

>>> a = [1, 2, 3] 
>>> b = [4, 5, 6] 
>>> a.extend(b) 
>>> a 
[1, 2, 3, 4, 5, 6]

这可能看起来类似于拼接,但存在一个重要差别,那就是将修改被扩展的序列(这里是a),即a被修改了,而没有产生副本。 在常规拼接中,情况是返回一个全新的序列。

>>> a = [1, 2, 3] 
>>> b = [4, 5, 6] 
>>> a + b 
[1, 2, 3, 4, 5, 6] 
>>> a 
[1, 2, 3] 

`

  • extend

extend让你能够同时将多个值附加到列表末尾,为此可将这些值组成的序列作为参数提供给方法extend。换而言之,你可使用一个列表来扩展另一个列表

>>> a = [1, 2, 3] 
>>> b = [4, 5, 6] 
>>> a.extend(b) 
>>> a 
[1, 2, 3, 4, 5, 6]

这可能看起来类似于拼接,但存在一个重要差别,那就是将修改被扩展的序列(这里是a),即a被修改了,而没有产生副本。 在常规拼接中,情况是返回一个全新的序列。

>>> a = [1, 2, 3] 
>>> b = [4, 5, 6] 
>>> a + b 
[1, 2, 3, 4, 5, 6] 
>>> a 
[1, 2, 3] 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lzukomorebi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值