Python3列表操作

访问列表中的值

有两种方法访问列表中的值:
1.使用下标索引来访问列表中的值;

list1=[1,2,3,4,5]
print(list1[0])
#Output: 1

print(list[-2]) #访问列表第倒数第2个元素
#Output: 4

2.使用方括号的形式截取字符;

list1=[1,2,3,4,5]
print(list1[1:4]) #第2个元素到第4个元素
#Output: [2,3,4]

print(list1[2:]) #第3个元素及其之后的元素
#Output: [3,4,5]

print(list1[:3]) #第3个元素及其之前第元素
#Output: [1,2,3]

更新列表

1.直接对列表的数据项进行修改或更新;

list1=[1,2,3,4,5]
list1[0]=6
print(list1)
#Output: [6,2,3,4,5]

list1[1:3]=[100,101,102,103]
print(list1)
#Output: [6,100,101,102,103,4,5]

2.使用append()方法在列表末尾添加新的对象;

list1=[1,2,3,4,5]
list1.append(6)
print(list1)
#Output: [1,2,3,4,5,6]

3.使用insert()方法将指定对象插入列表的指定位置;

list1=['a','b','c','d']
list1.insert(2, 'A')
print(list1)
#Output: ['a','b','A','c','d']

4.使用reverse() 方法反向列表中元素;

list1=[1,2,3,4,5]
list1.reverse()
print(list1)
#Output: [5,4,3,2,1]

删除列表中的元素

1.使用 del 语句来删除列表的的元素;

list1=[1,2,3,4,5]
del list1[3] #删除第4个元素
print(list1)
#Output: [1,2,3,5]

2.使用remove() 方法移除列表中某个值的第一个匹配项;

list1=[1,2,3,4,5,1]
list1.remove(1)
print(list1)
#Output: [2,3,4,5,1]

3.使用pop() 函数移除列表中的一个元素(默认最后一个元素),并且返回该元素的值;

list1=[1,2,3,4,5]
list1.pop()
print(list1)
#Output: [1,2,3,4]

list1.pop(2)
print(list1)
#Output: [1,2,4]

4.使用clear() 函数清空列表,类似于 del list1[:];

list1=[1,2,3,4,5]
list1.clear()
print(list1)
#Output: []

列表脚本操作符

列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。

Python 表达式 结果 描述
len([1, 2, 3]) 3 长度
[1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] 组合
[‘Hi!’] * 4 [‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’] 重复
3 in [1, 2, 3] True 元素是否存在于列表中
for x in [1, 2, 3]: print(x, end=" ") 1 2 3 迭代

列表截取与拼接

1.直接使用脚本操作符号+进行列表拼接,如前所述;

2.使用extend() 函数在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表);

list1 = ['a', 'b', 'c']
list2=list(range(5)) # 创建 0-4 的列表
list1.extend(list2)  # 扩展列表
print(list1)
#Output: ['a','b','c',1,2,3,4,5]

extend 与 append 方法的相似之处在于都是将新接收到参数放置到已有列表的后面。而 extend 方法只能接收 list,且把这个 list 中的每个元素添加到原 list 中。而 append 方法可以接收任意数据类型的参数,并且简单地追加到 list 尾部。

其他列表函数&方法

1.len() 方法返回列表元素个数;

list1=[1,2,3,4,5]
print(len(list1))
#Output: 5

2.max() 方法返回列表元素中的最大值;

list1=[1,2,3,4,5]
print(max(list1))
#Output: 5

3.min() 方法返回列表元素中的最小值;

list1=[1,2,3,4,5]
print(min(list1))
#Output: 1

4.list() 方法用于将元组或字符串转换为列表;

aTuple = (123, 'Google', 'Runoob', 'Taobao')
list1 = list(aTuple)
print (list1)
#Output: [123, 'Google', 'Runoob', 'Taobao']

str="Hello World"
list2=list(str)
print (list2)
#Output: ['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']

注:元组与列表是非常类似的,区别在于元组的元素值不能修改,元组是放在括号中,列表是放于方括号中。

5.count() 方法用于统计某个元素在列表中出现的次数;

list1=['a','b','c','d','e','b']
print(list1.count('b'))
#Output: 2

6.copy() 函数用于复制列表,类似于 list1[:];

list1=[1,2,3,4,5]
list2=list1.copy()
print(list2)
#Output: [1,2,3,4,5]

7.index() 函数用于从列表中找出某个值第一个匹配项的索引位置;

list1=['a','b','c','d','e','c']
print(list1('c'))
#Output: 2

该方法返回查找对象的索引位置,如果没有找到对象则抛出异常。

8.sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。

语句:list.sort(cmp=None, key=None, reverse=False)

参数
cmp – 可选参数, 如果指定了该参数会使用该参数的方法进行排序。
key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse – 排序规则,reverse = True 降序, reverse = False 升序(默认)。

list1 = ['Google', 'Runoob', 'Taobao', 'Facebook']
list1.sort()
print(list1)
#Output: ['Facebook', 'Google', 'Runoob', 'Taobao']


#1 降序
vowels = ['e', 'a', 'u', 'o', 'i']
vowels.sort(reverse=True)
print(vowels)
#Output: ['u', 'o', 'i', 'e', 'a']


#2 通过指定列表中的元素排序来输出列表:
# 获取列表的第二个元素
def takeSecond(elem):
    return elem[1]
    
random = [(2, 2), (3, 4), (4, 1), (1, 3)]
random.sort(key=takeSecond)# 指定第二个元素排序
print (random)
#Output: [(4, 1), (2, 2), (1, 3), (3, 4)]


#3 根据列表中元素的长度排序
def list_sort_by_length():  
    list=["delphi","Delphi","python","Python","c++","C++","c","C","golang","Golang"]  
    list.sort(key=lambda ele:len(ele)) #按元素长度顺序升序排列  
    print("升序:",list)  
  
    list.sort(key=lambda ele:len(ele),reverse=True) #按降序排列  
    print("降序:",list)
#借助于 lambda 表达式,计算 list 列表中的元素的长度,根据元素的长度进行排序。
#Output:
#升序: ['c', 'C', 'c++', 'C++', 'delphi', 'Delphi', 'python', 'Python', 'golang', 'Golang']  
#降序: ['delphi', 'Delphi', 'python', 'Python', 'golang', 'Golang', 'c++', 'C++', 'c', 'C']


#4 根据列表中元素的多个属性进行排序:
def two_d_list_sort():  
    list=[ ["1","c++","demo"],  
           ["1","c","test"],  
           ["2","java",""],  
           ["8","golang","google"],  
           ["4","python","gil"],  
           ["5","swift","apple"]  
    ]  
    list.sort(key=lambda ele:ele[0])# 根据第1个元素排序  
    print(list)  
    list.sort(key=lambda ele:ele[1]) #先根据第2个元素排序  
    print(list)  
    list.sort(key=lambda ele:ele[1]+ele[0]) #先根据第2个元素排序,再根据第1个元素排序  
    print(list)
#Output: 同样借助于 lambda 表达式完成,当然也可以定义一个与 labmda 具有相同意义的函数实现排序。
#Output: 
#[['1', 'c++', 'demo'], ['1', 'c', 'test'], ['2', 'java', ''], ['4', 'python', 'gil'], ['5', 'swift', 'apple'], ['8', 'golang', 'google']]  
#[['1', 'c', 'test'], ['1', 'c++', 'demo'], ['8', 'golang', 'google'], ['2', 'java', ''], ['4', 'python', 'gil'], ['5', 'swift', 'apple']]  
#[['1', 'c++', 'demo'], ['1', 'c', 'test'], ['8', 'golang', 'google'], ['2', 'java', ''], ['4', 'python', 'gil'], ['5', 'swift', 'apple']]


#5 动态的根据用户指定的索引进行排序
def two_d_list_sort2(sort_index="0,1,2"): # 动态的根据传入的元素索引进行排序  
    list=[ ["1","c++","demo"],  
           ["1","c","test"],  
           ["2","java",""],  
           ["8","golang","google"],  
           ["4","python","gil"],  
           ["5","swift","apple"]  
           ]  
    key_set=""  
    for item in sort_index.split(","):  
        key_set+="ele["+item+"]+"  
    key_set=key_set.rstrip("+")  
    list.sort(key=lambda ele:eval(key_set))  
    print("排序索引:",sort_index,list)  
  
if __name__=="__main__":  
    two_d_list_sort2("0")  
    two_d_list_sort2("1")  
    two_d_list_sort2("2")  
    two_d_list_sort2("1,0")
#有时候,在写代码之前,并不知道根据二维表的哪几列排序,而是在程序运行的时候根据输入或配置决定的。
#为了解决这个动态根据多个列或属性排序的问题,借助了 eval() 函数,eval() 函数能够把字符串编译成 python 代码并运行,从而达到动态根据多个列或属性排序的目的。
#Output: 
#排序索引: 0 [['1', 'c++', 'demo'], ['1', 'c', 'test'], ['2', 'java', ''], ['4', 'python', 'gil'], ['5', 'swift', 'apple'], ['8', 'golang', 'google']]  
#排序索引: 1 [['1', 'c', 'test'], ['1', 'c++', 'demo'], ['8', 'golang', 'google'], ['2', 'java', ''], ['4', 'python', 'gil'], ['5', 'swift', 'apple']]  
#排序索引: 2 [['2', 'java', ''], ['5', 'swift', 'apple'], ['1', 'c++', 'demo'], ['4', 'python', 'gil'], ['8', 'golang', 'google'], ['1', 'c', 'test']]  
#排序索引: 1,0 [['1', 'c++', 'demo'], ['1', 'c', 'test'], ['8', 'golang', 'google'], ['2', 'java', ''], ['4', 'python', 'gil'], ['5', 'swift', 'apple']]

综上,基本总结了 list.sort 的使用的大部分场景,如下:
1、默认排序
2、根据类对象的单个属性进行排序,当然也可以扩展为根据类对象的多个属性进行排序
3、根据元素的固有属性进行排序,如:长度、第N个元素等。为了简单,所以借助了 lambda 表达式,当然也可以使用普通函数代替 lambda 表达式
4、动态的根据多个列进行排序,同时借助 lambda 和 eval() 函数实现
可能还有一些场景没有涉及到,不过我相信,上面的几种情况可以满足90%以上的场景了,如果在使用中有问题欢迎留言交流。

注意:1. sort 方法不适合 int 和 str 类型元素之间的比较。

详细参看:Python3 列表

猜你喜欢

转载自blog.csdn.net/qq_38789531/article/details/83274196