欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

列表,元组,字符串

程序员文章站 2022-07-14 22:13:12
...

列表


1.列表定义:列表是有序集合,没有固定大小,能够保存任意数量任意类型的 Python 对象,语法为 [元素1, 元素2, …, 元素n]。

>>> x=[1,2,3,4]
>>> x[0]
1
>>> x[-1]
4 
  1. 列表的创建
  • 创建一个普通列表
    -利用range()创建列表
    -利用推导式创建列表
    -创建一个 4×3的二维数组

注意:

由于list的元素可以是任何对象,因此列表中所保存的是对象的指针。即使保存一个简单的[1,2,3],也有3个指针和3个整数对象。x = [a] * 4操作中,只是创建4个指向list的引用,所以一旦a改变,x中4个a也会随之改变。

  1. 向列表中添加元素

(1) list.append(obj) 在列表末尾添加新的对象,只接受一个参数,参数可以是任何数据类型,被追加的元素在 list 中保持着原结构类型。此元素如果是一个 list,那么这个 list 将作为一个整体进行追加,注意append()和extend()的区别。
(2)list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)严格来说 append 是追加,把一个东西整体添加在列表后,而 extend 是扩展,把一个东西里的所有元素添加在列表后。
(3)list.insert(index, obj) 在编号 index 位置插入 obj。

  1. 删除列表中的元素
    (1)list.remove(obj) 移除列表中某个值的第一个匹配项。
    (2)list.pop([index=-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。
    注意:remove 和 pop 都可以删除元素,前者是指定具体要删除的元素,后者是指定一个索引。
    (3)del var1[, var2 ……] 删除单个或多个对象。
    如果你要从列表中删除一个元素,且不再以任何方式使用它,就使用del语句;如果你要在删除元素后还能继续使用它,就使用方法pop()。

  2. 获取列表中的元素
    (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 - " : "
    复制列表中的所有元素(浅拷贝)。

  3. 列表的常用操作符
    等号操作符:==
    连接操作符 +
    重复操作符 *
    成员关系操作符 in、not in
    「等号 ==」,只有成员、成员位置都相同时才返回True。
    列表拼接有两种方式,用「加号 +」和「乘号 *」,前者首尾拼接,后者复制拼接。

  4. 列表的其它方法
    (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