LeetCode 链表常用的操作

链表是 Python 中最为常用的数据结构之一,下面我进行常用方法的总结:

维基百科解释

The Average Case assumes parameters generated uniformly at random.
Internally, a list is represented as an array; the largest costs come from growing beyond the current allocation size (because everything must move), or from inserting or deleting somewhere near the beginning (because everything after that must move). If you need to add/remove at both ends, consider using a collections.deque instead.

翻译:
一边情况下,我们假设参数是随机均匀生成的。
列表的内部实现可以看作是一个数组(和C\C++数组不同,list元素的类型可以不同)。列表最大的开销来自于列表空间增长到高于自动分配内存的大小(因为所有的元素都需要移动),或者是在列表接近于首部的地方插入和删除数据(因为在该元素后的所有数据都需要移动)。
如果你在尾部既需要增加也需要删除数据,或许应该考虑使用 collections.deque 数据类型

查和改

>>> list1 = ['a', 'b', 'c', 'd']
>>> # 常见的索引
>>> list1[2]
'c'
>>> list1[2:]
['c', 'd']
>>> list1[:]
['a', 'b', 'c', 'd']
>>> list1[-2]
'c'
>>> list1[:-1]
['a', 'b', 'c']
>>> list1[0:3]
['a', 'b', 'c']

>>> list1[1] = 1
>>> list1
['a', 1, 'c', 'd']

遍历操作

>>> for x in list1:
...     print(x)
...
a
1
c
d

>>> for i, x in enumerate(list1):
...     print('i=', i, ',x=', x, sep='')
...
i=0,x=a
i=1,x=1
i=2,x=c
i=3,x=d

>>> for i in range(len(list1)):
...     print(f'list1[{i}]={list1[i]}')
...
list1[0]=a
list1[1]=1
list1[2]=c
list1[3]=d

list.append()
list.extend()

list.clear(),清空列表
list.pop(index=-1)删除所在下标的元素,并获取他的数值
list.remove(value)删除元素数值匹配的第一个数据,倘若不存在: ValueError: list.remove(x): x not in list
del 可单个元素删除,也可切片删除

############ clear ###############
l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
l.clear()
print(l)
# []

########### pop ###########
l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(l.pop(0))
# 0
print(l)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

print(l.pop(3))
# 4
print(l)
# [1, 2, 3, 5, 6, 7, 8, 9]

print(l.pop(-2))
# 8
print(l)
# [1, 2, 3, 5, 6, 7, 9]

print(l.pop())
# 9
print(l)
# [1, 2, 3, 5, 6, 7]


########### remove ###########
l = ['Alice', 'Bob', 'Charlie', 'Bob', 'Dave']
print(l)
# ['Alice', 'Bob', 'Charlie', 'Bob', 'Dave']
l.remove('Alice')
print(l)
# ['Bob', 'Charlie', 'Bob', 'Dave']
l.remove('Bob')
print(l)
# ['Charlie', 'Bob', 'Dave']

# l.remove('xxx')
# ValueError: list.remove(x): x not in list

########### del ###########
l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
del l[0]
print(l)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

del l[-1]
print(l)
# [1, 2, 3, 4, 5, 6, 7, 8]
del l[6]
print(l)
# [1, 2, 3, 4, 5, 6, 8]

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


del l[2:5]
print(l)
# [0, 1, 5, 6, 7, 8, 9]

l = list(range(10))
del l[:3]
print(l)
# [3, 4, 5, 6, 7, 8, 9]

l = list(range(10))
del l[4:]
print(l)
# [0, 1, 2, 3]

l = list(range(10))
del l[-3:]
print(l)
# [0, 1, 2, 3, 4, 5, 6]


l = list(range(10))
del l[:]
print(l)
# []

趣味的操作

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]  
print([i for i in l if i % 2 == 0])
# [0, 2, 4, 6, 8]
print([i for i in l if i % 2 != 0])
# [1, 3, 5, 7, 9]
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


l = ['Alice', 'Bob', 'Charlie', 'Bob', 'David']
print(l)
# ['Alice', 'Bob', 'Charlie', 'Bob', 'David']
print([s for s in l if s != 'Bob'])
# ['Alice', 'Charlie', 'David']
print([s for s in l if s.endswith('e')])
# ['Alice', 'Charlie']



>>> list1 = list(range(10))
>>> list2 = [str(i) for i in range(10)]
>>> list2
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
>>> '+'.join(list2)
'0+1+2+3+4+5+6+7+8+9'



>>> res = [""] * 10    # 等价于 res = ["" for i in range(10)]
>>> res
['', '', '', '', '', '', '', '', '', '']

参考链接

Remove an item from a list in Python (clear, pop, remove, del)
维基百科的时间复杂度

posted @ 2021-12-27 19:38  lucky_light  阅读(127)  评论(0编辑  收藏  举报