python简明教程_03

这篇教程详细介绍了Python编程的基础,包括列表、元组和集合的数据结构。讲解了如何创建、操作和检索这些数据结构,以及它们的内置函数。此外,还探讨了索引、切片、排序和去重等概念,对于初学者深入理解Python编程非常有帮助。
摘要由CSDN通过智能技术生成

python编程语言简明教程,翻译自以下仓库:
Python-Lectures
原仓库是一系列的jupyter notebook,可以直接在jupyter环境下运行程序示例。我添加了中文注释,并改为了兼容python3

数据结构

列表list

列表中的内容应该用逗号隔开

a = []
print(type(a))

<class ‘list’>

直接将所有元素写出以构造列表:

x = ['apple', 'orange']

Indexing 索引

python的索引从0开始:

x[0]

‘apple’

倒序的索引从-1开始,即-1是orange,-2就是apple

x[-1]

‘orange’

y = ['carrot','potato']

x和y都是有两个元素的列表,如果用x和y以如下方式构造一个z,那么z将也是有两个元素的列表,不过z的每个元素都分别是一个两个元素的列表:

z  = [x,y]
print(z) #注意方括号

[[‘apple’, ‘orange’], [‘carrot’, ‘potato’]]

取z的第一个元素:

z1 = z[0]
print(z1)

[‘apple’, ‘orange’]

再取z1的第一个元素:

z1[0]

‘apple’

实际上z可以看作一个有两个“维度”的列表,因此可以用多维索引来访问元素:

z[0][0]

‘apple’

如果再多一维,可以用z[ ][ ][ ].

Slicing 切片

切片说的是从列表中取出一定范围内的元素

num = [0,1,2,3,4,5,6,7,8,9]
print(num[0:4])  # 从第0个到第4个元素,默认不包括最后一个元素
print(num[4:])   # 从第4个元素往后的所有元素

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

num[:9:3] # 表示从第0个元素开始到第9个元素,每隔3个元素取一个

[0, 3, 6]

list相关的内置函数

求列表长度

len(num)

10

min(num)

0

max(num)

9

用加号可以把两个列表组合成一个列表,注意,新生成的列表仍然是一维:

[1,2,3] + [5,4,7]

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

检查某元素是否包含在列表内:

names = ['Earth','Air','Fire','Water']
'Fire' in names

True

'Rajath' in names

False

在一个元素都是string字符串的列表中,用max()返回的是ASCII值最大的string元素,min()返回的是ASCII值最小的string元素。当两个string元素第一个字符的ASCII值相等时,比较第二个字符的ASCII码值大小,以此类推。

mlist = ['bzaa','ds','nc','az','z','klm']
print(max(mlist))
print(min(mlist))

z
az

如果是数字组成的string元素,如以下列表:

nlist = ['1','94','93','1000']
print(max(nlist))
print(min(nlist))

94
1

注意,在这里max()返回的不是1000,因为1000的第一个字符“1”的ASCII码值小于“9”的ASCII码值,而“4”的ASCII码值大于“3”,所以返回的是94
如果要找长度最长或最短的字符串元素,可以用“key”这个参数来规定查找的规则为“len”,也就是长度。如下:

print(max(names, key=len))
print(min(names, key=len))

Earth
Air

注意,Water虽然也是5个字符的长度,但在这里max和min会返回列表中第一个出现的符合要求的元素。因为Earth出现在Water之前,所以max返回的是Earth。

一个字符串可以用list()函数转换成字符组成的列表,如下:

list('hello')

[‘h’, ‘e’, ‘l’, ‘l’, ‘o’]

append( ) 方法可以用来在列表最后添加元素:

lst = [1,1,4,8,7]
lst.append(1)
print(lst)

[1, 1, 4, 8, 7, 1]

count( ) 可以用来计算列表中某个元素出现的次数:

lst.count(1)

3

append( ) 还可以在列表末尾添加另一个列表。但添加的列表变成了一个元素:

lst1 = [5,4,2,8]
lst.append(lst1)
print(lst)

[1, 1, 4, 8, 7, 1, [5, 4, 2, 8]]

如果不需要以上这种把列表添加成一个元素的形式,需要将列表展开,则使用 extend( ) 函数:

lst.extend(lst1)
print(lst)

[1, 1, 4, 8, 7, 1, [5, 4, 2, 8], 5, 4, 2, 8]

index( ) 可以用来返回某个元素的序号,如果有多个同样值的元素,返回第一个该值的元素:

lst.index(1)

0

insert(x,y) 可以用来将y元素插入到指定位置x,而 append( ) 只是将元素放在最末尾

lst.insert(5, 'name')
print(lst)

[1, 1, 4, 8, 7, ‘name’, 1, [5, 4, 2, 8], 5, 4, 2, 8]

insert(x,y) 只是插入一个元素,如果要替换指定位置的元素,直接给该位置用等号赋值即可:

lst[5] = 'Python'
print(lst)

[1, 1, 4, 8, 7, ‘Python’, 1, [5, 4, 2, 8], 5, 4, 2, 8]

pop( ) 返回列表中的最后一个元素,与堆栈的原理相似,即列表中不再有最后这个被pop出来的元素了。

lst.pop()

8

还可以pop执行序号的元素:

lst.pop(0)

1

pop( ) 能根据序号取出一个指定的元素。也可以使用 remove( ) 去掉一个指定值的元素:

lst.remove('Python')
print(lst)

[1, 4, 8, 7, 1, [5, 4, 2, 8], 5, 4, 2]

单纯去除元素的话也可用 del 函数去掉指定序号的元素:

del lst[1]
print(lst)

[1, 8, 7, 1, [5, 4, 2, 8], 5, 4, 2]

可以用 reverse() 函数来反转整个列表:

lst.reverse()
print(lst)

[2, 4, 5, [5, 4, 2, 8], 1, 7, 8, 1]

列表元素 [5,4,2,8] 里边的元素不会被反转;

Python里可以用 sort( ) 函数来对列表元素排序,默认是小到大的正序:

slst = [2, 4, 5, 1, 7, 8, 1]
slst.sort()
print(slst)

[1, 1, 2, 4, 5, 7, 8]

降序的话使用reverse参数:

slst.sort(reverse=True)
print(slst)

[8, 7, 5, 4, 2, 1, 1]

字符串元素的列表也可以用sort

names.sort()
print(names)
names.sort(reverse=True)
print(names)

[‘Air’, ‘Earth’, ‘Fire’, ‘Water’]
[‘Water’, ‘Fire’, ‘Earth’, ‘Air’]

以字符串长度为标准排序:

names.sort(key=len)
print(names)
names.sort(key=len,reverse=True)
print(names)

[‘Air’, ‘Fire’, ‘Water’, ‘Earth’]
[‘Water’, ‘Earth’, ‘Fire’, ‘Air’]

Copying a list 复制列表

大部分python的初学者都可能会犯一个错误。比如,如果我们创建一个列表:

lista= [2,1,4,3]
listb = lista
print(listb)

[2, 1, 4, 3]

然后让listb等于lista,listb就有了lista中的全部元素。现在我们来对lista进行操作:

lista.pop()
print(lista)
lista.append(9)
print(lista)

[2, 1, 4]
[2, 1, 4, 9]

print(listb)

[2, 1, 4, 9]

然后发现,listb也被改变了。这是因为单纯的listb=lista并没有新开辟一块内存给listb,再储存lista的元素进去,而只是将listb这个名字同样指向了lista指向的内存。

如果要将lista真正复制给listb,即listb不再受lista的影响,可以采用如下这种用:序号切片的方式:

lista = [2,1,4,3]
listb = lista[:]
print(listb)

[2, 1, 4, 3]

lista.pop()
print(lista)
lista.append(9)
print(lista)

[2, 1, 4]
[2, 1, 4, 9]

print(listb)

[2, 1, 4, 3]

元组Tuples

元组与列表相似,但是元组内的元素不可修改。将元组视为对于特定事物必须为True且对于其他任何值都不能为True的事物。

以下使用求余函数divmod

xyz = divmod(10,3)
print(xyz)
print(type(xyz))

(3, 1)
<class ‘tuple’>

因为10除以3,得出商为3余数为1的结果是唯一的,不会有其他结果,因此返回的结果是用元组表示的
可以用小括号()或tuple()定义一个元组

tup = ()
tup2 = tuple()

用一个元素加一个逗号,默认定义为一个元组:

27,

(27,)

用一个数乘以元组,只会将元组的元素个数扩大:(不会等于54)

2*(27,)

(27, 27)

可以用列表或字符串给元组做初始赋值:

tup3 = tuple([1,2,3])
print(tup3)
tup4 = tuple('Hello')
print(tup4)

(1, 2, 3)
(‘H’, ‘e’, ‘l’, ‘l’, ‘o’)

可以和列表一样通过索引序号来访问元组的元素:

print(tup3[1])
tup5 = tup4[:3]
print(tup5)

2
(‘H’, ‘e’, ‘l’)

元组间赋值:

(a,b,c)= ('alpha','beta','gamma')
print(a,b,c)

### 其中a、b、c每一个都是字符串类型str

alpha beta gamma

d = tuple('RajathKumarMP')
print(d)

(‘R’, ‘a’, ‘j’, ‘a’, ‘t’, ‘h’, ‘K’, ‘u’, ‘m’, ‘a’, ‘r’, ‘M’, ‘P’)

元组的内置函数

count() 函数计算元组中特定值的元素出现的次数

d.count('a')

3

index() 函数返回特定值的元素的序号,如果有多个元素有同样的值,返回第一个元素

d.index('a')

1

集合Sets

集合可以用来消除序列/列表中的重复元素。集合还可以执行一些标准的集合操作。

set()可以声明一个空集合。用set([序列])的方式创建有内容的集合。

set1 = set()
print(type(set1))

<class ‘set’>

set0 = set([1,2,2,3,3,4])
print(set0)

{1, 2, 3, 4}

可以看到,重复的元素 2,3 只保留了一个。

set的内置函数

set1 = set([1,2,3])
set2 = set([2,3,4,5])

union( ) 求并集:

set1.union(set2)

{1, 2, 3, 4, 5}

add( ) 可以在集合中增加一个元素,但是元素的位置不一定。

set1.add(0)
set1

{0, 1, 2, 3}

intersection( ) 求交集:

set1.intersection(set2)

{2, 3}

difference( ) 求在 set1 中而不在 set2 中的元素.

set1.difference(set2)

{0, 1}

symmetric_difference( ) 求只在一个集合中存在的元素.

set2.symmetric_difference(set1)

{0, 1, 4, 5}

issubset( ), isdisjoint( ), issuperset( ) 判断是否为子集、不交集、超集:

set1.issubset(set2) ### set2是否为set1的子集

False

set2.isdisjoint(set1)  ### set1与set2是否为不交集

False

set2.issuperset(set1)  ### set1是否为set2的超集

False

pop( ) 去除了集合中的任一元素

set1.pop()
print(set1)

{1, 2, 3}

remove( ) 删除指定元素

set1.remove(2)
set1

{1, 3}

clear( ) 去除所有元素

set1.clear()
set1

set()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值