一、列表
列表是多个元素组成的有序集合。
在Python中,使用[]来定义列表。
另外一种构造列表的方式是list(对象),其从另外一个对象复制数据来构建一个新的列表。
列表可以为空,即不包含任何元素的列表。用[]来表示空的列表。
「列表特性」
1.异构性
Python的列表不要求其元素的类型相同。
比如: a = [1, 2.3, "hello", [1, 2]]
第一个是int类型
第二个是float类型
第三个是字符串类型
第四个是列表,可镶嵌里面
2.元素个数可变
对于C语言和Java语言的数组来说,元素个数在定义时就已经确定了,以后是不可以修改的。而Python的列表对元素个数是没有限制的,而且可以在运行时动态发生变化,如可以在尾部添加一个元素,或者在头部插入一个元素。经过这样的操作后,列表的元素个数也会发生变化。
a.append(加入的内容)#用于尾部添加
a.insert(加入元素位置,加入元素内容)#用于指定位置的添加
添加完后,输出或打印列表a,既新的列表。
3.直接访问元素
这个和C语言、Java语言中的数组类似,可以指定某个位置来访问列表中的元素,如第一个元素、最后一个元素等。另外一种常见的数据结构是链表,但链表不可以直接访问任意元素,如要得到第三个元素的值,首先要访问第一个元素,通过第一个元素来找到第二个元素,再通过第二个元素来找到第三个元素。
4.对象表示法
我们从前面知道访问列表中任意元素的时间是相同的,这点就像C、C++和Java中的数组一样。但是其不要求所有元素类型相同,也不要求它们占用相同的内存空间,这是如何做到的呢?下面以列表[1,"hello"12.5,""]为例画出其在内存中对象模型,如图
列表元素「列表数据的常用操作」
1.得到元素个数——len()
可以使用len()函数来得到某个列表包含的元素个数。
如:len([]) #列表个数为0
len([1,2,3]) #列表个数为3
2.得到某种元素——列表[位置]
我们可以用“列表[位置]”来表示某个元素,然后可以读取该元素的值,也可以修改该元素的值。
list1 = [1, 2, 3] # 定义一个列表
list1[1] # 查看第二个元素的值
list1[1] =100 #修改第二个元素的值
3.在尾部添加元素——append()
结果就是元素个数加一,列表自己的id没有发生变化。
4.得到某个值在列表中出现的次数——count()如果没有出现过,那么返回0。
5.将另外一个列表的元素附加到尾部——extend(新列表)
将新列表的元素放在原来列表尾部,原来的列表数据发生了变化。
list_a=[1,2,3]
list_b=[10,20,30]
list_c=list_a.extend(list_b)
6.查找第一个指定值出现的位置——index()
第一个元素的位置为0。如果没有找到,抛出异常。
list_a=[1,2,3,4]
list_a.index(1)#第一个值为1的元素是0,输出位置结果:0
list_a.index(5)#第一个值为5的元素不存在,抛出异常
也可以指定开始位置。
list_a =[1,2,4,1,21,20]
list1=list_a.index(1,2)#开始位置为2,第一个值为1的元素是3,输出结果3
list2=list_a.index(1,0)#开始位置为0,第一个值1的元素是0,输出结果0
当然也可以同时指定开始和结束的位置。
list_a =[1,2,4,1,21,20]
list3=list_a.index(1,4,6)
开始位置是4,结束位置是5,为1的值的元素不存在。报错:ValueError: 1 is not in list
7.在指定位置插入元素——insert()
需要指定位置和值,在该位置后面的元素都会向后移动一个位置。
list_a=[1,4,6,8]
list_a.insert(1,2)
输出结果:list_a=[1,2,4,6,8]
8.删除指定位置的元素——pop()
将该指定位置上的元素从列表中删除,在该位置后面的元素都往前挪动一个位置。返回值是删除掉的元素的值。
list_a=[1,2,4,6,8]
list_a.pop(3)
输出结果:list_a=[1,2,6,8]
如果没有指定位置,那么就是删除最后一个元素。
9.删除第一个等于指定值的元素——remove(值)
从头部开始,删除第一个指定值的元素。
list_a =[1,2,6,1,21,20]
list_a.remove(1)删除第一个值为1的元素
输出结果:list_a=[2,3,1,21,20]
如果指定列表中没有元素的值等于指定的值,那么抛出异常。
10.颠倒顺序——reverse()
用于反转列表中的元素。
list_a=[1,2,6,8]
list_a.reverse()
输出结果:list_a=[8,6,2,1]
11.排序——sort()
这对于由整数组成的列表来说非常有用。如果不是数值型的元素,那么其使用某种排队规则进行排序。我们也可以指定自己的排队规则来实现不同的排列方式。默认正序排列。
list_a=[1,6,2,8,6,9]
print(list_a.sort(reverse=False))
反序为:
print(list_a.sort(reverse=True))
12.in操作符
用来判断某个列表中是否包含指定值的元素。如果包含,返回True;否则返回False。
list_a=[1,6,2,8,6,9]
1 in list_a #输出结果True
10 in list_a#输出结果False
13.not in操作符
判断某个值是否不在列表中。如果不在,返回True;否则返回False。该操作符和in刚好相反。
list_a=[1,6,2,8,6,9]
1 not in list_a #输出结果True
10 not in list_a#输出结果False
14.遍历所有元素——for in
该操作符依次访问列表中的所有元素,而且是按照列表中元素的顺序依次来访问。第一次访问该列表的第一个元素,第二次访问第二个元素,循环执行直到访问完最后一个元素。如果列表为空,该操作符也是合法的,但是不会执行循环内的代码,一次也不会执行。
list_a=[1,6,2,8,6,9]
for num in list_a:
print(num)#按照顺序输出各个元素值
找出丢失的数
有一个包含1到100,一共100整数的列表list,但是顺序已经被打乱,现在随机丢掉一个值,请计算出被扔掉的数的值。
1.直接的解法依次查看1到100哪些数没有在输入的列表中。代码如下:
import random
def search_num(list_a):
for numin range(1,101):
if numnot in list_a:
# print("丢失的数是:%d" %num)
return num#找到丢失的数
def test_search_num():
list_a =list(range(1,101))#得到100个数
random.shuffle(list_a)#打乱顺序
print(type(list_a))
drop_num = list_a.pop(50)#丢掉一个数
ret = search_num(list_a)
# print("miss num %d"%drop_num)
print(format(drop_num))
print(format(ret))
# print("Answer %d"%ret)
if __name__=='__main__':
test_search_num()
网友评论