您的位置:首页 > 编程语言 > Python开发

【Hello Python World】Class Notes of Week 2

2018-03-12 12:29 465 查看
列表 (3.14 update)

1.数组下标错误会抛出异常(与C++不同)

2.一个list里可以有不同的数据结构

3.插入方法

4.删除方法
第一种方法:pop(),有返回值

第二种方法:del,没有返回值

第三种方法:remove(),没有返回值,而且会抛出异常

5.操作方法
用sort()和sorted()从小到大排序

翻转列表reverse()

求长度len()

6.列表的数据处理
求和sum()和范围函数range()

求极值min()和max()

7.通过列表解析来生成列表

8.列表切片

9.列表复制辨析
片面地复制:用=

全面地复制:new_list = list[:]

10.元组:只读的列表,被阉割了列表的编辑操作

11.题外话:如何使print()不换行?

列表 (3.14 update)

1.数组下标错误会抛出异常(与
C++
不同)

li = [1,2,3,4,5]
的下标范围是
[-5,···,-1,0,4]
,越界会马上报错(
C++
不会)

2.一个
list
里可以有不同的数据结构

li = [[1,2,3],1,'2']
print(li)
#输出 [[1,2,3],1,'2']
print(1i[0][1])
#输出 2


3.插入方法

li = [['w','j'],'p']
li[0].insert(0,12)
print(li)
#输出 [[12, 'w', 'j'], 'p']


4.删除方法

第一种方法:
pop()
,有返回值

li = [1,2,3]
x = li.pop(1) # x = 2
print(li)
#输出 [1,3]
#pop是会返回值的


第二种方法:
del
,没有返回值

li = [1,2,3]
del li[1]
print(li)
#输出 [1,3]


为什么del的用法不是
li.del(1)


因为
del
不是列表特有的方法,就像C++里的
delete
free
一样


第三种方法:
remove()
,没有返回值,而且会抛出异常

当我们不知道列表里的某个值的元素的下标是什么,但是又想删除的时候,就使用
remove()


li = [1,2,1,3,4]
li.remove(1)
#输出 [2,1,3,4]
li.remove(5)
#抛出异常,输出:ValueError: list.remove(x): x not in list


remove()
只能删掉第一个元素,不会重复删除,重复删除需要
循环


5.操作方法

sort()
sorted()
从小到大排序

li = [5,3,6,2,1,9]
print(sorted(li))
#sorted() 返回一个新的列表
#输出 [1,2,3,5,6,9]
print(li)
#输出 [5,3,6,2,1,9]
li.sort()
print(li)
#输出 [1,2,3,5,6,9]


sorted()
返回一个临时的新列表,排序不对原列表产生影响,注意是
sorted(li)
而不是
li.sorted()
(会报错)

sort()
不返回任何东西,对原列表产生操作

li = [5,3]

print(li.sort())

输出:None


如果是不同类型的数据放在同一个列表里面排序,结果会怎么样呢?

li = [5,3,'1']

print(sorted(li))


报错:TypeError: '<' not supported between instances of 'str' and 'int'


翻转列表
reverse()

li = [5,3]
print(li.reverse())
#输出:None
#print(reverse(li)) 报错
li.reverse()
print(li)
#输出:[3,5]


求长度
len()

li = [5,3]
print(len(li))
#输出:2

#print(li.len()) 报错
#p
bf38
rint(lens(li)) 报错,没有lens()
#print(length()) 报错:没有length()
#print(size()) 报错:没有size()


len()
这样调用的函数称为内置函数,为了使它能适用于不止
list
的容器,不是
list
特有的函数,比如

word = 'Hello'
print(len(word))
#输出:5


同理,前面讲到的
sorted()
也是内置函数

word = 'hello'
print(sorted(word))
#输出:['e', 'h', 'l', 'l', 'o']
#注意,【字符串】已经变成了【字符数组】了


但是字符串里面没有
list
append()
等类成员,也就是说字符串字符列表是不等价的,虽然说一些
list
的操作也能用在字符串里面,比如负数的下标

word = 'Hello'
print(word[-1])
#输出:o


6.列表的数据处理

求和
sum()
和范围函数
range()

print( sum( range(1, 101) ) )
#输出 5050


注意:

1.
range()
的表示方式是左闭右开
[---)
,右边界要多算一个

2.
range()
的第三个参数是缺省的,用于指定步长,如

range(1, 20, 2) #步长为2,[1,19]


求极值
min()
max()

nums = [1,2,3,4,5]
print( min(nums) ) #max同理
#输出 1


7.通过列表解析来生成列表

例如:输出
1 - 10
的平方

nums = [ i ** 2 for i in range(1,11) ]


8.列表切片

当需要访问列表的一部分元素时,可以用
list[a:b]
来访问区间
[a,b) = [a,b-1]
,返回的也是一个列表,所以可以采用之前的对列表的操作来操作列表。

print(nums[:4]) #这样也是可以的


负数呢?比如求倒数的四个数的和:

print( sum( nums[-4:] ) )


又比如从头开始取,直到倒数第二个(也就是除了最后一个)

print(num[:-1]) #最后一个数是不包含的(开区间)


冒号两端两个数字都可以缺省:

print(nums[:]) #打印整个列表


注意:切片是一个独立于原列表的新列表:

nums = [1,2,3,,4,5]
nums[:].append(6)
print(nums)
#输出 [1,2,3,4,5] 可以看出并不受切片操作的影响


9.列表复制辨析

片面地复制:用
=

nums = [1,2,3,4,5]
new_nums = nums
new_nums.append(6)
print(nums) #输出什么呢?
#输出 [1,2,3,4,5,6] !!!!


这个例子说明了Python在列表复制时使用·
=
是一种类似于“换名”的操作,直接赋值创造出来的列表并不独立

注意:在Python中单个变量的复制就不是换名了:
num = 5
new_num = num
,改
new_num
不影响
num


全面地复制:
new_list = list[:]

nums = [1,2,3,4,5]
new_nums = nums[:]
new_nums.append(6)
print(nums)
#输出:[1,2,3,4,5] 可以看出两个列表是独立的,终于正常了


10.元组:只读的列表,被阉割了列表的编辑操作

元组切片是可用的,因为切片并不损伤原始数据

arr = (3,2,1)
print(arr[0:1])
#输出 [3,2]


想对元组动手?那就只能对整体下手:

arr = (3,2,1)
arr = [4,3] #这样并不违反规定


11.题外话:如何使
print()
不换行?

print()
函数的第二个参数被省去,若不想让它换行,就加上
, end = ""
,把默认的换行符改掉,如:

print("Hello", end = "")
print(", world!")
#输出 Hello, world!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python