二、列表
1、添加元素
l.append(x)
将x作为整体插入到列表
#append方法
a_list = ['string',20,-2]
a_list.append('fkit')
print(a_list)
a_tuple = (3.4,5.6)
a_list.append(a_tuple)
print(a_list)
a_list.append(['a','b'])
print(a_list)
['string', 20, -2, 'fkit']
['string', 20, -2, 'fkit', (3.4, 5.6)]
['string', 20, -2, 'fkit', (3.4, 5.6), ['a', 'b']]
l.extend(x)
将x中的元素分别插入到列表
#extend方法
b_list = ['a',30]
b_list.extend((-2,3.1))
print(b_list)
['a', 30, -2, 3.1]
l.insert(index,x)
将x插入到index索引处
#insert方法
c_list = list(range(1,6))
c_list.insert(3,'CRAZY')
print(c_list)
c_list.insert(3,tuple('crazy'))
print(c_list)
[1, 2, 3, 'CRAZY', 4, 5]
[1, 2, 3, ('c', 'r', 'a', 'z', 'y'), 'CRAZY', 4, 5]
2、删除元素
del l[index]
删除列表索引为index处的元素
#del方法
a_list = ['crazy',20,-2.4,(3,4),[2,'asd']]
b_list = [90,'ok',8.78]
del a_list[2]
print(a_list)
a_list.extend(b_list)
print(a_list)
a_list.insert(5,5.6)
print(a_list)
['crazy', 20, (3, 4), [2, 'asd']]
['crazy', 20, (3, 4), [2, 'asd'], 90, 'ok', 8.78]
['crazy', 20, (3, 4), [2, 'asd'], 90, 5.6, 'ok', 8.78]
l.remove(x)
将列表中第一个x元素删除
#remove、clear方法
c_list = [20,9.8,20,'srint',[1,2.3]]
c_list.remove(20)
print(c_list)
c_list.clear()
print(c_list)
c_list.extend(a_tuple)
print(c_list)
[9.8, 20, 'srint', [1, 2.3]]
[]
[3.4, 5.6]
(注:若在for循环中使用容易出现跳过元素的现象)
【例】力扣第27题移除元素:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
该题如果使用for遍历元素,当找到指定元素时删除,则会漏过连续的元素。正确解法如下
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
if not nums:
return 0
while val in nums:
nums.remove(val)
return len(nums)
3、其他方法
(1)l.count(x)
函数用于统计列表中某个元素出现的次数
(2)l.index(x)
函数用于获取某个元素在列表中出现的位置,若不存在x将引发ValueError异常,可使用try…catch…进行处理
a_list = [2,30,2,'sasd',90]
print(a_list.count(2))
print(a_list.index(2,1))
2
2
(3)sum()
函数对列表中所有元素求和
l = [3,4,5]
print(sum(l))
12
(4)l.pop()
函数将列表当作栈执行弹出操作
#栈操作
stack =[]
stack.append('fkit')
stack.append('asdsad')
stack.append('qweqwewe')
a = stack.pop()
print(a)
print(stack)
stack.pop()
print(stack)
qweqwewe
['fkit', 'asdsad']
['fkit']
(6)l.reverse()
用于将列表l反转,l2 = reversed(l)
将l反转并额外生成一个列表l2
#reverse
a_list = list(range(1,8))
a_list.reverse()
print(a_list)
[7, 6, 5, 4, 3, 2, 1]
(7)l.sort()
将列表升序排序。
#sort
a_list = [3,4,-2,-30,14,9.3,2.4]
b_list = sorted(a_list)
print(b_list)
[-30, -2, 2.4, 3, 4, 9.3, 14]
l2 = sorted(l)
将l排序后额外生成一个列表l2。
sort()
可以设置key值实现按指定参数排序,如l.sort(key = len , reverse = False)
实现将l中的元素从长到短进行排序。
#sort中的key和reverse
c_list = ['asd','Koasid','q','longger']
c_list.sort(key = len ,reverse = True)
print(c_list)
结果为
['longger', 'Koasid', 'asd', 'q']
4、序列相关方法
(1)in
关键字判断指定元素是否在列表中
(2)len()
函数用来获取列表的长度
(3)max()
min()
函数用来获取列表中最大和最小的元素
5、加法和乘法
order_endings = ('st','nd','rd')\
+('th',)*3+('st','nd','rd')
print(order_endings)
('st', 'nd', 'rd', 'th', 'th', 'th', 'st', 'nd', 'rd')
6、封包和解包
元组可以视为元素不可改变的列表,并且使用率比较低,因此就放在这里一并写了
封包是将多个元素打包成一个元组,而解包讲一个元组里面的值分别赋值给多个元素
封包和解包常用于交换两个元素的值a,b = b,a
#序列封包和解包
a,b,c = b,c,a
print(a)
print(b)
print(c)
vals = 10,20,30
a,b,c= 1,2,3
print(vals)
print(type(vals))
print(vals[1])
a_tuple = (1,3,5,7,9)
a,b,c,d,e = a_tuple
print(a,b,c,d,e)
first,second,*rest = range(10)
print(first)
print(second)
print(*rest)
print(type(rest))
2
3
1
(10, 20, 30)
<class 'tuple'>
20
1 3 5 7 9
0
1
2 3 4 5 6 7 8 9
<class 'list'>
7、enumerate()函数(重点)
enumerate()是python的内置函数,用于将一个可遍历的数据对象(如列表、元组或字符串等)组合为一个索引序列,同时列出数据和数据下标,多用于for循环。
【例】力扣第1160题拼写单词:给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。注意:每次拼写(指拼写词汇表中的一个单词)时,chars 中的每个字母都只能用一次。返回词汇表 words 中你掌握的所有单词的 长度之和。
from collections import Counter
class Solution:
def countCharacters(self, words: List[str], chars: str) -> int:
cnt = 0
dic_chars = Counter(chars)
for w in words:
dic_words = Counter(w)
for key in dic_words:
if dic_words[key] > dic_chars[key]:
break
#如果遍历完了仍然没有break则执行else
else:
cnt += len(w)
return cnt
cnt = 0
dic_chars = Counter(chars)
for w in words:
dic_words = Counter(w)
for key in dic_words:
if dic_words[key] > dic_chars[key]:
break
else:
cnt+=len(w)
return cnt