Python学习

一、基础知识

1. 长字符串、原始字符串、字节

(1)长字符串

跨越多行的字符串,可使用三引号。

>>print('''This is a very long string. It continues here.

And it's not over jet. "Hello. world!"

Still here.''' )

(2)原始字符串

>>>print(r"Let' go!")

>>>print(r"Let' go!\\")

原始字符串不能以单个反斜杠结尾。除非进行转义。

(3) Unicode、bytes和bytearray

>>>"Hello world".encode("UTF-8")

几乎在所有的情况下,都最好使用UTF-8。事实上,它也是默认使用的编码。

Python除了提供bytes对象,还提供了bytearray对象,它是bytes的可变版。

>>>x = bytearray(b"Hello!")

>>>x[1] = ord(b"u")

>>>x

bytearray(b'Hullo!')

 

二、 列表和元组

1、序列概述

Python中最基本的数据结构为序列(sequence),也内置了多种序列,最常用的两种:列表和元组。另一种重要的序列是字符串,列表和元组的主要不同在于,列表是可以修改的,而元组不可以。几乎在所有情况下都可以使用列表来代替元组,一种例外情况是将元组用作字典键,在这种情况下,不能使用列表来代替元组,因为字段建是不允许修改的。

>>>Smith = ["Smith",  50]

2、通用的序列操作

(1)索引

>>>greeting = "Hello"

>>> greeting[0]

'H'

>>>greeting[-1]

'o'

当使用负数索引时,Python将从右(即从最后一个元素)开始往左数。

(2)切片

>>>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 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

>>>numbers[-3:]

[8, 9, 10]

>>>numbers[:3]

[1, 2, 3]

>>>[:]

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

执行切片操作时,显式或隐式地指定起点和终点,但是通常省略另一个参数,即步长,在普通切片中,步长为1。

>>>numbers[0:10:2]

[1, 3, 5, 7, 9]

>>>numbers[10:0:-2]

[10, 8, 6, 4, 2]

(3)序列相加

>>>[1, 2, 3] + [4, 5, 6]

[1, 2, 3, 4, 5, 6]

不能拼接序列和字符串,虽然它们都是序列,一般而言,不能拼接不同类型的序列。

(4)乘法

>>>'python' * 5

'pythonpythonpythonpythonpython'

空列表是使用不包含任何内容的两个方括号[]表示的。在Python中,None表示什么都没有,因此,要将列表的长度初始化为10,可以

>>>sequence = [None] * 10

>>>sequence

[None, None, None, None, None, None, None, None, None, None]

3、列表的方法

(1)list

>>>list('Hello')

['H', 'e', 'l', 'l', 'o']

(2)基本的列表操作

赋值

>>>x=[1, 1, 1]

>>>x[1] = 2

>>>x

[1, 2, 1]

删除元素

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

>>>del names[2]

>>>names

['Alice', 'Beth', 'Dee-Dee']

切片赋值

>>>name = list('Perl')

>>>name

['P', 'e', 'r', 'l']

>>>name[2:] = list('ar')

>>>name

['P', 'e', 'a', 'l']

切片插入

>>>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]

(3)列表方法

append

>>>lst = [1, 2, 3]

>>>lst.append(4)

>>lst

[1, 2, 3, 4]

clear

>>>lst = [1, 2, 3]

>>>lst.clear()

>>>lst

[]

copy

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

>>>b = a

>>>b[1] = 4

>>>a

[1, 4, 3]

常规复制只是将另一个名称关联到列表

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

>>>b = a.copy()

>>>b[1] = 4

>>>a

[1, 2, 3]

count

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

>>>['to', 'be', 'or', 'not', 'to', 'be'].count('to')

extend

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

>>>b = [4, 5, 6]

>>>a.extend(b)

>>>a

[1, 2, 3, 4, 5, 6]

使用一个列表来扩展另一个列表

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

>>>b = [4, 5, 6]

>>>a + b

[1, 2, 3, 4, 5, 6]

>>>a

[1, 2, 3]

在常规拼接中,会返回一个全新的序列。鉴于常规拼接必须使用a和b的副本创建一个新列表,如果你要获得类似于下面的效果,拼接的效率将比externd低。

index

index在列表中查找指定值第一次出现的索引。

>>>knights = ['We', 'are', 'the', 'knights', 'who', 'say', 'ni']

>>>knights.index(‘who’)

4

>>>knights.index('herring')

Traceback(innermost last):

    File "<pyshell>", line 1, in?

ValueError: list.index(x): x not in list

insert

方法insert用于将一个对象插入列表。

>>>numbers = [1, 2, 3, 5, 6, 7]

>>>numbers.insert(3, 'four')

>>>numbers

[1, 2, 3, 'four', 5, 6, 7]

pop

>>>x = [1, 2, 3]

>>>x.pop()

3

>>>x

[1, 2]

>>>x.pop(0)

1

>>>x

[2]

remove

方法remove用于删除第一个为指定值的元素

>>>x = ['to', 'be', 'or', 'not', 'to', 'be']

>>>x.remove('be')

>>>x

['to', 'or', 'not', 'to', 'be']

reverse

方法reverse按相反的顺序排列列表中的元素。

>>>x = [1, 2, 3]

>>>x.reverse()

>>>x

[3, 2, 1]

注意到reverse修改列表,但不返回任何值。

sort

方法sort用于对列表就地排序。就地排序意味着对原来的列表进行修改,使其元素按顺序排列,而不是返回排序后的列表的副本。

>>>x = [4, 6, 2, 1, 7, 9]

>>>x.sort()

>>>x

[1, 2, 4, 6, 7, 9]

sort修改列表不返回任何值的方法,

>>>x = [4, 6, 2, 1, 7, 9]

>>>y = x.sort()        #Don't do this!

>>>print(y)

None

为了实现前述目标,正确的方式之一是先将y关联到x的副本,再对y进行排序。

>>>x = [4, 6, 2, 1, 7, 9]

>>>y = x.copy()

>>>y.sort()

>>>x

[4, 6, 2, 1, 7, 9]

>>>y

[1, 2, 4, 6, 7, 9]

实际上,这个函数可用于任何序列,但总是返回一个列表。

(4) 元组

与列表一样,元组也是序列,唯一的差别在于元组是不能修改的,元组还可用圆括号括起,空元组用不包含任何内容的圆括号表示, 

>>> 1, 2, 3

(1, 2, 3)

>>>(1, 2, 3)

(1, 2, 3)

空元组用两个不包含任何内容的圆括号表示

>>>()

()

虽然只有一个值,也必须在它后面加上逗号,(42)与42完全等效,但仅仅加上一个逗号,就能完全改变表达式的值。

>>>42

42

>>>42,

(42,)

第三章 使用字符串

所有的标准序列操作(索引、切片、乘法、成员资格检查、长度、最小值和最大值)都适用于字符串,但别忘了字符串是不可变的,因此所有的元素赋值和切片赋值都是非法的。

1、设置字符串的格式:精简版

(1)、使用字符串格式设置字符串(格式字符串)

>>>format = "Hello, %s. %s enough for ya?"

>>>values = ('world', 'Hot')

>>>format % values

'Hello, world. Hot enough for ya?'

(2)、模板字符串

>>>from string import Template

>>>tmpl = Template("Hello, $who!, $what enough for ya?")

>>>tmpl.substitute(who="Mars", what = "Dusty")

'Hello, Mars! Dusty enough for ya?'

(3)、如果变量与替换的字段同名,还可使用一种简写。

>>>from math import e

>>>f"Euler's constant is roughly {e}."

"Euler"'s constant is roughly 2.718281828459045

2、字符串方法

(1)、center 通过两边填充字符(默认为空格)让字符串居中。

>>>"The Middle by Jimmy Eat World".center(39)

'         The Middle by Jimmy Eat World        '

>>>"The Middle by Jimmy Eat World".center(39, "*")

'********The Middle by Jimmy Eat World*******'

(2)、find方法在字符串中查找子串,如果找到就返回子串的第一个字符的索引,否则返回-1。

>>>'With a moo-moo here, and a moo-moo there'.find('moo')

7

>>>title = "Monty Python's Flying Cirus"

>>>title.find('Monty')

0

(3)、join用于合并序列的元素

>>>seq = [1 ,2, 3, 4, 5]

>>>sep = '+'

>>>sep.join(seq)

Traceback(most recent call last):

File "<stdin>", line 1, in ?

TypeError: sequence item 0: expected string, int found

>>>seq = ['1', '2', '3', '4', '5']

>>>sep.join(seq)

'1+2+3+4+5'

>>>dirs = ' ', 'usr', 'bin', 'env'

 

第四章 当索引行不通时

字典是Python中唯一的内置映射类型

1、创建和使用字典

字典由键以及相应的值组成,这种键-值对称为项(item)。整个字典放在花括号内。空字典(没有任何项)用两个花括号{}表示。

phonebook = {'Alice':'2341', 'Beth':'9102', 'Cecil': '3258'}

(1)、函数dict

>>>items = [('name'), 'Gumby', ('age', 42)]

>>>d = dict(items)

>>>d

{'age':42, 'name':'Gumby'}

>>>d['name']

'Gumby'

还可以使用关键字实参来调用这个函数,如下所示:

>>>d = dict(name = 'Gumby', age=42)

>>>d

{'age':42, 'name':'Gumby'}

(2)、基本的字典操作

len(d)返回字典d包含的项(键-值对)数。

d[k]返回与键k相关联的值。

d[k] = v将值v关联到键k。

del d[k]删除键为k的项。

k in d检查字典d是否包含键为k的项。

键的类型:字典中国的键可以是整数,但并非必须是整数。

自动添加:即使是字典中原本没有的键,也可以给它赋值,这将在字典中创建一个新项。

成员资格:表达式k in d查找的是键而不是值。

>>>phonebook

{'Beth':'9102', 'Alice':'2341', 'Cecil':'3258'}

>>>"Cecil's phone number is {Cecil}. ".format_map(phonebook)

Cecil's phone number is 3258

(3)、字典方法

clear方法clear删除所有的字典项。copy返回一个新的字典,其中包含的键-值对原来的字典相同(这个方法执行的浅复制)。一种方法是执行深复制,即同时复制值及其包含的所有值,可以使用模块copy中的函数deepcopy。

fromkeys创建一个新的字典,其中包含指定的键,且每个键对应的值都是None。

>>>{}.fromkeys(['name', 'age'])

{'age':None, 'name':None}

如果不想使用默认值None,可提供特定的值。

>>>dict.fromkeys(['name', 'age'], '(unknow)')

{'age':unknow, 'name':unknow}

get方法为访问字典提供了宽松的环境,

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值