python内置数据类型之列表操作

 数据类型是一种值的集合以及定义在这种值上的一组操作。一切语言的基础都是数据结构,所以打好基础对于后面的学习会有百利而无一害的作用。

  python内置的常用数据类型有:数字、字符串、Bytes、列表、元组、字典、集合、布尔等

1.什么是列表

lst[#] 通过下标访问,从0开始。
ps:如果#超过下标的范围时候会出现IndexError的错误。
如果#为负号,则索引从右边开始,#无论为正负均有范围,超过范围会报错。
lst = list(range(0,9)) #生产列表
l1 = lst[3] #通过正索引访问元素
l2 = lst[-1] #通过负索引访问元素
print(l1)
print(l2)
#说明,如果正负索引超界,则会报错。
#错误代码:IndexError: list index out of range

2 .列表元素查找

查找元素:L.index( value,[start[stop]])方法:返回查找到的第一个value值的索引。

start表示从第几个索引开始,stop表示到哪个索引结束,均可省略。

b.但是如果出现stop,其前必须有start值,索引时包含start位置不包含stop位置。

c.如果匹配不到元素,则返回:ValueError: xx is not in list

d.index查找元素的时间复杂的为O(n)

lst = list(range(11,19))
print(lst)
[11, 12, 13, 14, 15, 16, 17, 18]
lst.index(13) #13的索引值为2

统计元素:L.count(value) 统计列表中出现多少个value值。

len(L),求list列表的长度。

count方法的时间复杂的为O(n)

3 .列表元素操作

a.修改元素

直接赋值,L[#]=value。

#为列表的索引值

索引不能越界,会报错IndexError: list assignment index out of range

修改列表自身

lst = list(range(1,10))
lst[2]=111
lst[4]=123
lst
[1, 2, 111, 4, 123, 6, 7, 8, 9]

b.增加元素

L.append(#),修改L本身,并且追加在列表末尾。

L.extend([#1,#2,#3]) , 将可迭代对象扩展到列表末尾。

L+[‘a','b','c'] ,不修改列表本身,返回一个新的列表。

c.插入元素

L.insert(idx,#),将在该idx前插入#,会修改L本身。

当idx为正数,且大于列表本身的索引数,

会实现append方法将插入在元素最末尾;当idx为负数,且小于-len(L)+1时将会插入到列表最前。

append的时间复杂度是O(1),效率和数据的规模无关。

insert的时间复杂度是O(n),效率个数据规模正相关。

d.移除元素

L.remove(value),修改自身,从左到右删除第一个匹配到的值。

L.pop(idx),返回并删除索引指向的值。如果不指定idx,将删除列表最后的元素。

pop不指定值时,时间复杂度是O(1)的;

pop指定idx时,时间复杂度是O(n)的。

L.clear(),删除索引元素。慎用,会引起垃圾回收。

e.列表反转

reverse(),修改自身,反转列表元素。

f.列表排序

L.sort(),排序操作,修改自身,升序排列。 L.sort(reverse=True),逆序排列。

4 .列表进阶

1. 列表复制

copy()方法,列表浅拷贝。遇到引用类型,仅仅复制引用地址。当原来引用类型的值发生变化时,拷贝后的列表的值也随之发生变化。

lst = list(range(4))
lst1 = lst.copy()
print(lst1)
#浅拷贝特性说明
lst = [1,[2,3,4],5]
lst1 = lst.copy()
lst1[1][2] = 11
lst[1][0]=22
print(lst)
print(lst1)
#lst = lst1,引用内的值改变,列表均发生变化。
[0, 1, 2, 3]
[1, [22, 3, 11], 5]
[1, [22, 3, 11], 5]

copy模块下的deepcopy() 提供了深拷贝方法。

import copy
lst = [1,[2,3,4],5]
lst1 = copy.deepcopy(lst)
lst1[1][2] = 11
print(lst)
print(lst1)
#lst != lst1 对比lst.copy方法。
[1, [2, 3, 4], 5]
[1, [2, 3, 11], 5]

2. 打乱列表

需要引入random模块

# random.shuffle(list)
lst = [1,323,4,-3,[1,3],None,(1,34),{1:3}]
random.shuffle(lst) #修改自身,返回值为None,不能使用其他空间接受。
lst #通过shuffle打乱后列表的顺序发生变化。
[323, {1: 3}, None, [1, 3], 1, -3, 4, (1, 34)]

random模块的其他对象:

import random
print(random.randint(1,11)) #返回[1,11] 之间的整数,注意左右闭区间
print(random.choice(range(11))) #从非空序列中随机挑选一个整数
#randrange ([start,] stop [,step]) 从指定的范围内,按指定基数递增的集合中获取一个随机数
random.randrange(1,7,2) #从[1,7)中,步长为2的数字中获取一个数

总结

以上所述是小编给大家介绍的python内置数据类型之列表,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Python全栈之列表数据类型详解

    前言 列表(list)同字符串一样都是有序的,因为他们都可以通过切片和索引进行数据访问,且列表是可变的. 创建列表的几种方法 第一种 name_list = ['Python', 'PHP', 'JAVA'] 第二种 name_list = list(['Python', 'PHP', 'JAVA']) 创建一个空列表 >>> li = list() >>> type(li) <class 'list'> 把一个字符串转换成一个列表 >>>

  • python3利用ctypes传入一个字符串类型的列表方法

    c语言里:c_p.c #include <stdio.h> void get_str_list(int n, char *b[2]) { printf("in c start"); for(int i=0;i<n;i++) { printf("%s", *(b+i)); printf("\n"); } printf("in c end"); } 编译为动态库的命令: gcc -o hello1.so -sha

  • 浅谈Python数据类型判断及列表脚本操作

    数据类型判断 在python(版本3.0以上)使用变量,并进行值比较时.有时候会出现以下错误: TypeError: unorderable types: NoneType() < int() 或者类似的类型错误. 这是因为一方变量的数据类型不明(python无法判断),所以出错. 在一般情况下,可以提前对要使用的变量进行定义并赋值,例如: var=' ' 或者 var=0 等等. 但是,若变量在比较前,是通过调用函数或者其他表达式赋值的,以上方法可能行不通,因为如果调用的函数如果存在错误或者没

  • Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】

    本文实例讲述了Python列表list操作符.分享给大家供大家参考,具体如下: #coding=utf8 ''''' 列表也可以使用比较操作符,比较时更加ASCII进行比较的. 比较列表时也用内建函数cmp()函数: 两个列表的元素分别比较,直到有一方胜出. 元组进行比较操作时和列表遵循相同的逻辑. 列表的切片操作和字符串的切片操作很像, 不过列表的切片操作返回的是一个对象或者几个对象的集合. 列表的切片操作也遵循从正负索引规则,也有开始索引值,结束索引值, 如果这两个值为空,默认为序列的开始和

  • Python 字符串类型列表转换成真正列表类型过程解析

    我们在写代码的过程中,会经常使用到for循环,去循环列表,那么如果我们拿到一个类型为str的列表,对它进行for循环,结果看下面的代码和图: str_list = str(['a','b','c']) for row in str_list: print(row) 结果: Python 字符串类型列表转换成真正列表类型 那么for循环就把str类型的列表的每一个字符都一个一个的循环的打印出来,而这个结果并不是我们想要的,那么如何解决这个问题?,使用到第三方模块,看下面的代码 from ast i

  • Python数据类型详解(二)列表

    一.基本数据类型 整数:int 字符串:str(注:\t等于一个tab键) 布尔值: bool 列表:list (元素的集合) 列表用[] 元祖:tuple 元祖用() 字典:dict 注:所有的数据类型都存在想对应的类列里 二.列表所有数据类型: 基本操作: 索引,切片,追加,删除,长度,切片,循环,包含 list class list(object): """ list() -> new empty list list(iterable) -> new lis

  • Python数据类型之列表和元组的方法实例详解

    引言 我们前面的文章介绍了数字和字符串,比如我计算今天一天的开销花了多少钱我可以用数字来表示,如果是整形用 int ,如果是小数用 float ,如果你想记录某件东西花了多少钱,应该使用 str 字符串型,如果你想记录表示所有开销的物品名称,你应该用什么表示呢? 可能有人会想到我可以用一个较长的字符串表示,把所有开销物品名称写进去,但是问题来了,如果你发现你记录错误了,想删除掉某件物品的名称,那你是不是要在这个长字符串中去查找到,然后删除,这样虽然可行,那是不是比较麻烦呢. 这种情况下,你是不是

  • Python数据类型之List列表实例详解

    本文实例讲述了Python数据类型之List列表.分享给大家供大家参考,具体如下: list列表 1.概述: 通过之前的学习,我们知道变量可以存储数据,但是一个变量只能存储一个数据,现在有一个班级,班级有20个人,现在求班级的平均年龄. 若按照之前的方式来解决 age1 = 10 age2 = 12 ... age20 = 12 average = (age1 + age2 +...+age20)/20 在这里,很显然这种方法显得很麻烦,而python提供了一种解决方案,就是使用列表,可以随时添

  • 深入了解Python数据类型之列表

    一.基本数据类型 整数:int 字符串:str(注:\t等于一个tab键) 布尔值: bool 列表:list (元素的集合) 列表用[] 元祖:tuple 元祖用() 字典:dict 注:所有的数据类型都存在想对应的类列里 二.列表所有数据类型: 基本操作: •索引 •切片 •追加 •删除 •长度 •切片 •循环 •包含 list class list(object): """ list() -> new empty list list(iterable) ->

  • Python DataFrame设置/更改列表字段/元素类型的方法

    Python DataFrame 如何设置列表字段/元素类型? 比如笔者想将列表的两个字段由float64设置为int64,那么就要用到DataFrame的astype属性,举例如图: 该例列表为"m_pred_survived"字段为"PassengerId"及"Survived",设置为int64类型,最后可以输出检验下是否正确. m_pred_survived = pd.DataFrame(columns=['PassengerId', '

随机推荐