python已知有列表_Python之列表

列表:有序的可变的元素集合,列表是最常见的Python数据类型,它可以作为一个方括号内的逗号分隔出现。

列表的数据项不需要具有相同的类型。

创建一个列表,只要把逗号分隔的不同数据项使用方括号括起来即可,如下所示:

list1 = ['Google', 'baidu', 1997, 2000]

list2 = [1, 2, 3, 4, 5]

list3 = ["a", "b", "c", "d"]

与字符串的索引一样,列表索引从0开始,列表可以进行截取、组合等

列表的定义方式2:

# 1)列表生成式

# range(stop) [0, 1, 2...,stop-1]

# range(start, stop[,step]) [start, start + step, start + 2*step..., < stop]

# step默认值是1

nums = range(100)# 为了防止生成的列表没有被使用,python3做了一些改变,不会立即生成列表

# 生成1~100之间的所有奇数

nums = range(1, 100, 2)

# 2)列表推导式 从一个list推导出另外一个list

1 #原始方式::

2 nums = [1, 2, 3, 4, 5]3 resultList =[]4

5 for num innums:6 resultNum = num**2

7 resultList.append(resultNum)8

9 print("resultList::", resultList)

输出结果:resultList::  [1, 4, 9, 16, 25]

# 列表推导式::

# 语法:: [表达式 for 变量 in 列表]

# [表达式 for 变量 in 列表 if条件]

1 #for循环里面得出的num值取幂次方

2 resultList = [num**2 for num innums]3 print(resultList)4

5 resultList = [num**2 for num in nums if num % 2 !=0]6 print(resultList)

输出结果:

[1, 4, 9, 16, 25]

[1, 9, 25]

列表增加的常用操作

1:append()

# append() 方法用于在列表末尾添加新的对象。

# append() 方法用于在列表末尾添加新的对象。

# list.append(obj)

# 参数::

# obj -- 添加到列表末尾的对象。

# 返回值::

# 该方法无返回值,但是会修改原来的列表。

1 list1 = ["Google", "Jd", "TaoBao"]2 list1.append("baidu")3 print("更新后的列表::", list1)

输出结果:更新后的列表::  ['Google', 'Jd', 'TaoBao', 'baidu']

1 AList =[]2 num = [2]3 AList.append(num)4 print("id(num) == id(AList[0])::", id(num) ==id(AList[0]))5 print("num的值没有发生变化的时候::", id(num), id(AList[0]), AList)

输出结果:

id(num) == id(AList[0]):: True

num的值没有发生变化的时候:: 37290792 37290792 [[2]]

# 如上例所示,当 num 发生变化时(前提是 id(num) 不发生变化),

# Alist 的内容随之会发生变化。往往会带来意想不到的后果,想避免这种情况,可以采用深拷贝解决:

1 num.append(5)2 print("当num的值发生变化的时候::", id(num), id(AList[0]), AList)

输出结果为:

当num的值发生变化的时候:: 37290792 37290792 [[2, 5]]

# 可见当num发生变化的时候,AList也发生了变化,这有可能不是我们想要的结果

2:insert()

# insert() 函数用于将指定对象插入列表的指定位置

# insert()方法语法:

# list.insert(index, obj)

# 参数::

# index -- 对象obj需要插入的索引位置。

# obj -- 要插入列表中的对象。

# 返回值::

# 该方法没有返回值,但会在列表指定位置插入对象。

1 List1 = ['Google', 'Runoob', 'Taobao']2 List1.insert(1, 'Baidu')3 print("insert插入后的列表结果::", List1)

输出结果:

insert插入后的列表结果::  ['Google', 'Baidu', 'Runoob', 'Taobao']

3:extend()

# extend() 函数用于在列表末尾一次性追加另一个序列中的多个值

# extend()方法语法:

# list.extend(seq)

# 参数::

# seq -- 元素列表。

# 返回值::

# 该方法没有返回值,但会在已存在的列表中添加新的列表内容。

1 List1 = ['Google', 'Runoob', 'Taobao']2 List2 = range(5)3 List1.extend(List2)4 print("扩展后的列表::", List1)

输出结果:

扩展后的列表::  ['Google', 'Runoob', 'Taobao', 0, 1, 2, 3, 4]

# extend与append的区别

AList = ['w', 'i', 's', 't']

AList.extend(['q', 'y'])print("AList扩展之后的结果::", AList)

BList= ['w', 'i', 's', 't']

BList.append(['q', 'y'])print("BList扩展之后的结果::", BList)

输出结果:

AList扩展之后的结果:: ['w', 'i', 's', 't', 'q', 'y']

BList扩展之后的结果:: ['w', 'i', 's', 't', ['q', 'y']]

# extend 与 append 方法的相似之处在于都是将新接收到参数放置到已有列表的后面。而 extend 方法只能接收 list,且把这个 list

# 中的每个元素添加到原 list 中。

# 而 append 方法可以接收任意数据类型的参数,并且简单地追加到 list 尾部。

4:乘法运算

1 #['Hi!'] * 4 = ['Hi!', 'Hi!', 'Hi!', 'Hi!'] 重复

2 List1 = ['Hello']3 print("List1的乘法运算::", List1*4)

输出结果:

List1的乘法运算::  ['Hello', 'Hello', 'Hello', 'Hello']

5:加法运算

1 #加法运算

2 #[1, 2, 3] + [4, 5, 6] = [1, 2, 3, 4, 5, 6] 组合

3 AList = ['a', 'b', 'c']4 BList = ['d', 'e', 'f', 'g']5 print("AList + BList::", AList + BList)

输出结果:

AList + BList::  ['a', 'b', 'c', 'd', 'e', 'f', 'g']

列表的删除常用操作:

1:del

# del语句 可以删除一个指定的元素(对象)

# 语法::

# del 指定元素

# 注意:

# 可以删除整个列表

# 删除一个变量

# 也可以删除某个元素

1 List1 = ['Google', 'Baidu', 1997, 2000]2 print("原始列表::", List1)3

4 del List1[1]5 print("删除第二个元素::", List1)6 #可以这样直接删除一个变量

7 num = 888

8 delnum9 #删除整个列表

10 del List1

输出结果:

原始列表:: ['Google', 'Baidu', 1997, 2000]

删除第二个元素:: ['Google', 1997, 2000]

2:pop()

# pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。

# pop()方法语法:

# list.pop([index=-1]])

# 参数::

# index -- 可选参数,要移除列表元素的索引值,不能超过列表总长度,默认为 index=-1,删除最后一个列表值。

# 返回值::

# 该方法返回从列表中移除的元素对象。

1 List1 = ['Google', 'Baidu', 'Taobao']2 List1.pop()3 print("列表现在为::", List1)4 List1.pop(1)5 print("列表现在为::", List1)6

7 #可以通过以下方法打印pop()函数来显示返回值

8 List1 = ['Google', 'Baidu', 'Taobao']9 ListPop = List1.pop(1)10 print("删除的项为::", ListPop)11 print("列表现在为::", List1)

输出结果:

列表现在为:: ['Google', 'Baidu']

列表现在为:: ['Google']

删除的项为:: Baidu

列表现在为:: ['Google', 'Taobao']

3:remove()

# remove() 函数用于移除列表中某个值的第一个匹配项。

# remove()方法语法:

# list.remove(obj)

# 参数::

# obj -- 列表中要移除的对象

# 返回值::

# 该方法没有返回值但是会移除两种中的某个值的第一个匹配项。

1 List1 = ['Google', 'Baidu', 'Taobao']2 List1.remove('Baidu')3 print("现在的列表为::", List1)4 List1.remove('Google')5 print("列表现在为::", List1)

输出结果:

现在的列表为:: ['Google', 'Taobao']

列表现在为:: ['Taobao']

# 注意,如果要删除的元素列表里面不存在,程序会报错,所以在删除元素的时候,最好判定以下

# 这个元素是否存在于这个列表里面

# 另外注意循环内删除列表元素所带来的坑

1 nums = [1, 2, 2, 3, 4, 2, 5, 2]2 #删除列表里面所有为2的元素

3 for num innums:4 if num == 2:5 nums.remove(num)6

7 print("删除所有2的元素的列表为::", nums)

输出结果:删除所有2的元素的列表为::  [1, 3, 4, 5, 2]

此时我们发现我们并没有删除完所有为2的元素

那么用什么方式避免这种问题呢?两种方式:

1):

1 while 2 innums:2 nums.remove(2)3

4 print(nums)

2)

1 #列表推导式

2 nums = [i for i in nums if not(i == 2)]3 print(nums)

更新修改列表中的值

1):查询操作index()

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

# index()方法语法:

# list.index(obj)

# 参数::

# obj -- 查找的对象。

# 返回值::

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

1 List1 = ['Google', 'Baidu', 'Taobao']2 print("Baidu的索引值::", List1.index('Baidu'))3 print("Taobao的索引值::", List1.index('Taobao'))

输出结果:

Baidu的索引值:: 1

Taobao的索引值:: 2

2)count()

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

# count()方法语法:

# list.count(obj)

# 参数::

# obj -- 列表中统计的对象。

# 返回值::

# 返回元素在列表中出现的次数。

1 AList = [123, 'Google', 'Taobao', 'Baidu', 123, 456]2 print("123元素的个数::", AList.count(123))3 print("456元素的个数::", AList.count(456))

输出结果:

123元素的个数:: 2

456元素的个数:: 1

3)获取多个元素

items[start:end:step]

1 AList = [123, 'Google', 'Taobao', 'Baidu', 123, 456]2 pic =AList[::]3 print("切片::", pic)4

5 pic = AList[1:4:2]6 print("pic::", pic)

输出结果:

切片:: [123, 'Google', 'Taobao', 'Baidu', 123, 456]

pic:: ['Google', 'Baidu']

列表的遍历操作

1)方式1   根据元素进行遍历

for item in list

1 values = ["a", "b", "a", "c"]2

3 currentIndex =04 for v invalues:5 print(v)6 print("列表元素对应的索引值::", values.index(v, currentIndex))7 currentIndex += 1

输出结果:

a

列表元素对应的索引值:: 0

b

列表元素对应的索引值:: 1

a

列表元素对应的索引值:: 2

c

列表元素对应的索引值:: 3

2)方式2    根据索引进行遍历

for index in range(len(list)):

1 values = ['google', 'baidu', 'sogou', 'baidu']2

3 for index inrange(len(values)):4 print("index索引对应的值::", index, values[index])

输出结果:

index索引对应的值:: 0 google

index索引对应的值:: 1 baidu

index索引对应的值:: 2 sogou

index索引对应的值:: 3 baidu

3)方式3   创建对应的枚举对象,遍历枚举对象

枚举对象概念:通过枚举函数,生成一个新的对象

枚举对象作用:用于将一个可遍历的数据对象(如列表、元组或字符串)组合一个索引序列。同时列出数据下标和数据

语法:enumerate(sequence, [start=0]) sequence:一个序列,迭代器或其他支持迭代对象

start:下标起始位置

values = ['a', 'b', 'c', 'd', 'e', 'f']

# 1:先根据列表,创建一个枚举对象

enumerate(values)

# 想要打印出来结果可以这样写

# print(list(enumerate(values)))(结果为:[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e'), (5, 'f')])

# 遍历整个枚举对象

# 你可以这样遍历

# for tupValues in enumerate(values):

# print(tupValues[0])

# print(tupValues[1])

1 nums = (0, 'baidu')2 idx, value =nums3 print(idx)4 print(value)

输出结果为:

0

baidu

# 所以我们也可以这样遍历枚举对象

# for tupValues in enumerate(values):

# idx, value = tupValues

# print(idx)

# print(value)

1 for idx, value inenumerate(values):2 print(idx, "::", value)

输出结果为:

0 :: a

1 :: b

2 :: c

3 :: d

4 :: e

5 :: f

迭代器介绍

# 什么是迭代

# 是访问集合元素的一种方式 按照某种顺序逐个访问集合中的每一项

# 什么是可迭代对象

# 能够被迭代的对象,称之为可迭代对象 判定依据:能作用于for in

# 判定方法:import collections

# isinstance(obj, collections.Iterable)

# 判定一个对象是不是可迭代对象

1 importcollections2 nums = [1, 2, 3]3 print(isinstance(nums, collections.Iterable))

输出结果:True

# 迭代器:是可以记录遍历位置的对象 从第一个元素开始,往后通过next()函数,进行遍历,只能往后,不能往前

# 判定依据:能作用于next()函数

# 判定方法:import collections

# isinstance(obj, collections.Iterator)

# 注意:迭代器也是可迭代对象,所以也可以作用于for in

1 nums = [1, 2, 3]2 result =isinstance(nums, collections.Iterator)3 print("是否是个迭代器::", result)4 #说明nums是个可迭代对象,单不是一个迭代器

5

6 #生成一个可迭代器

7 iteratorNum =iter(nums)8 print(iteratorNum)

输出结果:

是否是个迭代器:: False

# 为什么会产生迭代器

# 1:使用迭代器不要求事先准备好整个迭代过程中的所有元素。迭代器仅仅在迭代到某个元素时才计算该元素,

# 而在这之前或之后元素可以不存在或者被销毁。因此迭代器适合遍历一些数量巨大甚至无限的序列。

# 2:提供了一个统一的访问集合的接口, 可以把所有的可迭代对象,转换成迭代器进行使用

1 values = ['baidu', 'google', 'sogou']2 #创建一个迭代器

3 it =iter(values)4

5 #遍历迭代器

6 whileTrue:7 try:8 x =next(it)9 print(x)10 exceptStopIteration:11 break

12

13 #注意:如果取出完毕,再继续取得话,则会报错 StopIteration

输出结果:

baidu

google

sogou

# 迭代器一般不能多次迭代

1 #例如下面

2 nums = [1, 2, 3, 4]3 it1 =iter(nums)4

5 for v init1:6 print(v)7

8 print("---------------------")9 for v init1:10 print(v)11 #可以看出第二次访问迭代器的时候没有任何数据了

输出结果:

1

2

3

4

---------------------

列表的判定操作

# 元素 in 列表

# 元素 not in 列表

1 values = [1, 2, 3, 4, 5]2 print(6 invalues)3 print(6 not in values)

输出结果:

False

True

# cmp() 方法用于比较两个列表的元素。

# cmp()方法语法:

# cmp(list1, list2)

# 参数:

# list1 -- 比较的列表。

# list2 -- 比较的列表。

# 返回值:

# 如果比较的元素是同类型的,则比较其值,返回结果。

# 如果两个元素不是同一种类型,则检查它们是否是数字。

# 如果是数字,执行必要的数字强制类型转换,然后比较。

# 如果有一方的元素是数字,则另一方的元素"大"(数字是"最小的")

# 否则,通过类型名字的字母顺序进行比较。

# 如果有一个列表首先到达末尾,则另一个长一点的列表"大"。

# 如果我们用尽了两个列表的元素而且所 有元素都是相等的,那么结果就是个平局,就是说返回一个 0

# Python 3.X 的版本中已经没有 cmp 函数,如果你需要实现比较功能,需要引入 operator 模块,适合任何对象,

# Python3.x 可以直接使用> < == 来比较两个列表的大小

1 List1 = ['a', 'b', 'c']2 List2 = ['a', 'd']3

4 printcmp(List1, List2)5

6 list3, list4 = [456, 'xyz'], [123, 'abc']7

8 printcmp(list3, list4)9

10

11 list5 = [1, 2, 3]12 list6 = [1, 2, 3]13

14 print cmp(list5, list6)

输出结果:

-1

1

0

1 List1 = [456, 'abc']2 List2 = [123, 'abd']3

4 result = List1 >List25 print("List1 > List2::", result)6

7 List3 = [1, 2, 3]8 List4 = [1, 2, 3]9 result = List3 ==List410 print("List3 == List4::", result)

输出结果:

List1 > List2:: True

List3 == List4:: True

列表的排序操作

# 方式1 内建函数 可以对所有可迭代对象进行排序

# sorted() 函数对所有可迭代的对象进行排序操作。

# sorted 语法:

# sorted(iterable[, cmp[, key[, reverse]]])

# 参数说明:

# iterable -- 可迭代对象

# cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。

# key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。

# reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

1 a = [5, 7, 6, 3, 4, 1, 2]2 b =sorted(a)3 #可以保留原列表

4 print("a列表信息::", a)5 print("b列表信息::", b)

输出结果:

a列表信息:: [5, 7, 6, 3, 4, 1, 2]

b列表信息:: [1, 2, 3, 4, 5, 6, 7]

# sorted()的高级用法。

# 有时候,我们要处理的数据内的元素不是一维的,而是二维的甚至是多维的,那要怎么进行排序呢?

# 这时候sorted()的key参数就派上用场了,key参数可传入一个自定义函数。

1 List = [('b', 1), ('a', 2), ('c', 4), ('d', 3), ('e', 5)]2 defgetKey(x):3 return x[1]4

5 result = sorted(List, key=getKey, reverse=True)6 print(result)

输出结果:

[('e', 5), ('c', 4), ('d', 3), ('a', 2), ('b', 1)]

# 方式2 列表对象方法

# sorted()和sort()的主要区别在于,list.sort()是对已经存在的列表进行操作,进而可以改变进行操作的列表

# 而内建函数sorted()返回的是一个新的list,而不是在原来的基础上进行操作的。

# 另一点区别就是:sorted()对所有可迭代对象排序,而sort只能操作列表

1 L = [1, 3, 2, 5, 7, 4]2 result =L.sort()3 print("原来的L信息::", L)4 print("result接收到的结果::", result)5

6 l = [('xq', 18), ('xq2', 16), ('xq1', 17), ('xq3', 15)]7 l.sort()8 print("l排序后的结果::", l)9

10 defgetKey1(x):11 return x[1]12

13 l.sort(key=getKey1)14 print("根据key值排序的结果::", l)

输出结果:

原来的L信息:: [1, 2, 3, 4, 5, 7]

result接收到的结果:: None

l排序后的结果:: [('xq', 18), ('xq1', 17), ('xq2', 16), ('xq3', 15)]

根据key值排序的结果:: [('xq3', 15), ('xq2', 16), ('xq1', 17), ('xq', 18)]

列表的乱序和反转

# 可以随机打印一个列表

# 导入random模块

# import random

# random.shuffle(list)

1 importrandom2

3 l = [1, 2, 3, 4, 5]4 res =random.shuffle(l)5 print(l, res)6 #由此我们可以看到random.shuffle()是直接改变原有列表

输出结果:

[2, 5, 1, 3, 4] None

# 列表反转

# list.reverse()

# 切片反转

# l[::-1]

1 l = [1, 2, 3, 4, 5]2 res =l.reverse()3 print("列表的反转::", res, l)4

5 res = l[::-1]6 print("切片反转::", res, l)

输出结果:

列表的反转:: None [5, 4, 3, 2, 1]

切片反转:: [1, 2, 3, 4, 5] [5, 4, 3, 2, 1]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值