列表,元组,字符串
列表
1.列表定义:列表是有序集合,没有固定大小,能够保存任意数量任意类型的 Python 对象,语法为 [元素1, 元素2, …, 元素n]。
>>> x=[1,2,3,4]
>>> x[0]
1
>>> x[-1]
4
- 列表的创建
- 创建一个普通列表
-利用range()创建列表
-利用推导式创建列表
-创建一个 4×3的二维数组
注意:
由于list的元素可以是任何对象,因此列表中所保存的是对象的指针。即使保存一个简单的[1,2,3],也有3个指针和3个整数对象。x = [a] * 4操作中,只是创建4个指向list的引用,所以一旦a改变,x中4个a也会随之改变。
- 向列表中添加元素
(1) list.append(obj) 在列表末尾添加新的对象,只接受一个参数,参数可以是任何数据类型,被追加的元素在 list 中保持着原结构类型。此元素如果是一个 list,那么这个 list 将作为一个整体进行追加,注意append()和extend()的区别。
(2)list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)严格来说 append 是追加,把一个东西整体添加在列表后,而 extend 是扩展,把一个东西里的所有元素添加在列表后。
(3)list.insert(index, obj) 在编号 index 位置插入 obj。
-
删除列表中的元素
(1)list.remove(obj) 移除列表中某个值的第一个匹配项。
(2)list.pop([index=-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。
注意:remove 和 pop 都可以删除元素,前者是指定具体要删除的元素,后者是指定一个索引。
(3)del var1[, var2 ……] 删除单个或多个对象。
如果你要从列表中删除一个元素,且不再以任何方式使用它,就使用del语句;如果你要在删除元素后还能继续使用它,就使用方法pop()。 -
获取列表中的元素
(1)通过元素的索引值,从列表获取单个元素,注意,列表索引值是从0开始的。
(2)通过将索引指定为-1,可让Python返回最后一个列表元素,索引 -2 返回倒数第二个列表元素,以此类推。
(3)切片的通用写法是 start : stop : step
情况 1 - “start :”
以 step 为 1 (默认) 从编号 start 往列表尾部切片。
情况 2 - “: stop”
以 step 为 1 (默认) 从列表头部往编号 stop 切片。
情况 3 - “start : stop”
以 step 为 1 (默认) 从编号 start 往编号 stop 切片。
情况 4 - “start : stop : step”
以具体的 step 从编号 start 往编号 stop 切片。注意最后把 step 设为 -1,相当于将列表反向排列。
情况 5 - " : "
复制列表中的所有元素(浅拷贝)。 -
列表的常用操作符
等号操作符:==
连接操作符 +
重复操作符 *
成员关系操作符 in、not in
「等号 ==」,只有成员、成员位置都相同时才返回True。
列表拼接有两种方式,用「加号 +」和「乘号 *」,前者首尾拼接,后者复制拼接。 -
列表的其它方法
(1)list.count(obj) 统计某个元素在列表中出现的次数。
(2)list.index(x[, start[, end]]) 从列表中找出某个值第一个匹配项的索引位置。
(3)list.reverse() 反向列表中元素。
(4)list.sort(key=None, reverse=False) 对原列表进行排序。
key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse – 排序规则,reverse = True 降序, reverse = False 升序(默认)。
该方法没有返回值,但是会对列表的对象进行排序。
练习题:
列表lst 内容如下
lst = [2, 5, 6, 7, 8, 9, 2, 9, 9]
请写程序完成下列操作:
在列表的末尾增加元素15
在列表的中间位置插入元素20
将列表[2, 5, 6]合并到lst中
移除列表中索引为3的元素
翻转列表里的所有元素
对列表里的元素进行排序,从小到大一次,从大到小一次
>>> lst = [2, 5, 6, 7, 8, 9, 2, 9, 9]
>>> lst.append(15)
>>> print(lst)
[2, 5, 6, 7, 8, 9, 2, 9, 9, 15]
>>> lst.insert(4,20)
>>> print(lst)
[2, 5, 6, 7, 20, 8, 9, 2, 9, 9, 15]
>>> lst = [2, 5, 6, 7, 8, 9, 2, 9, 9]
>>> lst.insert(4,20)
>>> print(lst)
[2, 5, 6, 7, 20, 8, 9, 2, 9, 9]
>>> lst = [2, 5, 6, 7, 8, 9, 2, 9, 9]
>>> lst.append(15)
>>> print(lst)
[2, 5, 6, 7, 8, 9, 2, 9, 9, 15]
>>> lst.insert(5,20)
>>> print(lst)
[2, 5, 6, 7, 8, 20, 9, 2, 9, 9, 15]
>>> lst1=[2, 5, 6]
>>> lst2=lst+lsy1
Traceback (most recent call last):
File "<pyshell#38>", line 1, in <module>
lst2=lst+lsy1
NameError: name 'lsy1' is not defined
>>> lst2=lst+lst1
>>> print(lst2)
[2, 5, 6, 7, 8, 20, 9, 2, 9, 9, 15, 2, 5, 6]
>>> lst.pop(3)
7
>>> lst2.pop(3)
7
>>> print(lst2)
[2, 5, 6, 8, 20, 9, 2, 9, 9, 15, 2, 5, 6]
>>> lst2.reverse()
>>> print(lst2)
[6, 5, 2, 15, 9, 9, 2, 9, 20, 8, 6, 5, 2]
>>> lst2.sort(reverse=true)
Traceback (most recent call last):
File "<pyshell#46>", line 1, in <module>
lst2.sort(reverse=true)
NameError: name 'true' is not defined
>>> lst2.sort(reverse=True)
>>> print(lst2)
[20, 15, 9, 9, 9, 8, 6, 6, 5, 5, 2, 2, 2]
>>> lst2.sort(reverse=False)
>>> print(lst2)
[2, 2, 2, 5, 5, 6, 6, 8, 9, 9, 9, 15, 20]
问题描述:
lst = [1, [4, 6], True]
请将列表里所有数字修改成原来的两倍
>>> lst = [1, [4, 6], True]
>>> for i in range(3):
if i!=1:
lst[i]=lst[i]*2
else:
for j in range(2):
lst[i][j]=lst[i][j]*2
>>> print(lst)
[2, [8, 12], 2]
3、leetcode 852题 山脉数组的峰顶索引
如果一个数组k符合下面两个属性,则称之为山脉数组
数组的长度大于等于3
存在$i$,$i$ >0 且$i<\operatorname{len}(k)-1$, 使得$$\mathrm{k}[0]<\mathrm{k}[1]<\ldots<\mathrm{k}[\mathrm{i}-1]<\mathrm{k}[\mathrm{j}]>\mathrm{k}[\mathrm{i}+1] \ldots>\mathrm{k}[\operatorname{len}(\mathrm{k})-1]$$
这个$i$就是顶峰索引。
现在,给定一个山脉数组,求顶峰索引。
示例:
输入:[1, 3, 4, 5, 3]
输出:True
输入:[1, 2, 4, 6, 4, 5]
输出:False
***def Solution(x):
if len(x)<3 or x[0]>x[1]:
return False
else:
k=0
for i in range(len(x)-1):
if x[i+1]<x[i] and k==0:
k=1
if k==1 and x[i+1]>x[i]:
return False
break
if i==len(x)-2:
return True
## 元组
1. 元组定义:语法为(元素1, 元素2, ..., 元素n)
小括号把所有元素绑在一起
逗号将每个元素一一分开
2. 创建和访问一个元组
(1)Python 的元组与列表类似,不同之处在于tuple被创建后就不能对其进行修改,类似字符串。
(2)元组使用小括号,列表使用方括号。
(3)元组与列表类似,也用整数来对它进行索引 (indexing) 和切片 (slicing)。
(4)创建元组可以用小括号 (),也可以什么都不用,为了可读性,建议还是用 ()。
(5)元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用。
3. 更新和删除一个元组
元组有不可更改 (immutable) 的性质,因此不能直接给元组的元素赋值,但是只要元组中的元素可更改 (mutable),那么我们可以直接更改其元素,注意这跟赋值其元素不同。
4. 元组相关的操作符
等号操作符:==
连接操作符 +
重复操作符 *
成员关系操作符 in、not in
「等号 ==」,只有成员、成员位置都相同时才返回True。
元组拼接有两种方式,用「加号 +」和「乘号 *」,前者首尾拼接,后者复制拼接。
5. 内置方法
元组大小和内容都不可更改,因此只有 count 和 index 两种方法。
count('python') 是记录在元组 t 中该元素出现几次,显然是 1 次
index(10.31) 是找到该元素在元组 t 的索引,显然是 1
6. 解压元组
【例子】解压(unpack)一维元组(有几个元素左边括号定义几个变量)
t = (1, 10.31, 'python')
(a, b, c) = t
print(a, b, c)
#1 10.31 python
【例子】解压二维元组(按照元组里的元组结构来定义变量)
t = (1, 10.31, ('OK', 'python'))
(a, b, (c, d)) = t
print(a, b, c, d)
#1 10.31 OK python
【例子】如果你只想要元组其中几个元素,用通配符「*」,*英文叫 wildcard,在计算机语言中代表一个或多个元素。下例就是把多个元素丢给了 rest 变量。*
t = 1, 2, 3, 4, 5
a, b, *rest, c = t
print(a, b, c) # 1 2 5
print(rest) # [3, 4]*
【例子】如果你根本不在乎 rest 变量,那么就用通配符「*」加上下划线「_」。
t = 1, 2, 3, 4, 5
a, b, *_ = t
print(a, b) # 1 2
上一篇: Linus 创建新用户
下一篇: CSS 选择器