Python list列表

 

目录

使用 [ ] 直接创建列表

使用 list() 函数创建列表

删除列表

del:根据索引值删除元素

pop():根据索引值删除元素

remove():根据元素值进行删除

clear():删除列表所有元素

list列表添加元素的3种方法

append()方法添加元素

extend()方法添加元素

insert()方法插入元素

list列表修改元素

修改单个元素

修改一组元素

list列表查找元素

index() 方法

count()方法

range()快速初始化数字列表

list列表实现栈和队列

list实现队列

list实现栈

collections模块实现栈和队列


使用 [ ] 直接创建列表

listname = [element1 , element2 , element3 , ... , elementn]

其中,listname 表示变量名,element1 ~ elementn 表示列表元素。

num = ["something","somewhere"]
list = ["string",'a',123,1+2j,["abc",1],num]
print(list)
['string', 'a', 123, (1+2j), ['abc', 1], ['something', 'somewhere']]

使用 list() 函数创建列表

#将字符串转换成列表
list1 = list("hello")
print(list1)

#将元组转换成列表
tuple1 = ('Python', 'Java', 'C++', 'JavaScript')
list2 = list(tuple1)
print(list2)

#将字典转换成列表
dict1 = {'a':100, 'b':42, 'c':9}
list3 = list(dict1)
print(list3)

#将区间转换成列表
range1 = range(1, 6)
list4 = list(range1)
print(list4)

#创建空列表
print(list())
['h', 'e', 'l', 'l', 'o']
['Python', 'Java', 'C++', 'JavaScript']
['a', 'b', 'c']
[1, 2, 3, 4, 5]
[]

删除列表

del listname

del:根据索引值删除元素

del 是 Python 中的关键字,专门用来执行删除操作,它不仅可以删除整个列表,还可以删除列表中的某些元素,格式为:

del listname[index]

其中,listname 表示列表名称,index 表示元素的索引值。

del 也可以删除中间一段连续的元素,格式为:

del listname[start : end]

其中,start 表示起始索引,end 表示结束索引。del 会删除从索引 start 到 end 之间的元素,不包括 end 位置的元素。

pop():根据索引值删除元素

Python pop() 方法用来删除列表中指定索引处的元素,具体格式如下:

listname.pop(index)

其中,listname 表示列表名称,index 表示索引值。如果不写 index 参数,默认会删除列表中的最后一个元素,类似于数据结构中的“出栈”操作。

remove():根据元素值进行删除

remove() 方法,该方法会根据元素本身的值来进行删除操作。

需要注意的是,remove() 方法只会删除第一个和指定值相同的元素,而且必须保证该元素是存在的,否则会引发 ValueError 错误,所以我们在使用 remove() 删除元素时最好提前判断一下。

nums = [40, 36, 89, 2, 36, 100, 7]

#第一次删除36
nums.remove(36)
print(nums)

#第二次删除36
nums.remove(36)
print(nums)

#删除78
nums.remove(78)
print(nums)

运行结果:
[40, 89, 2, 36, 100, 7]

[40, 89, 2, 100, 7]

Traceback (most recent call last):
    File "C:\Users\mozhiyan\Desktop\demo.py", line 9, in <module>
        nums.remove(78)
ValueError: list.remove(x): x not in list

clear():删除列表所有元素

Python clear() 用来删除列表的所有元素,也即清空列表,请看下面的代码:

url = list("http://c.biancheng.net/python/")

url.clear()

print(url)

运行结果:
[]

list列表添加元素的3种方法

append()方法添加元素

append() 方法用于在列表的末尾追加元素,该方法的语法格式如下:

listname.append(obj)

l = ['Python', 'C++', 'Java']

#追加元素
l.append('PHP')
print(l)

#追加元组,整个元组被当成一个元素
t = ('JavaScript', 'C#', 'Go')
l.append(t)
print(l)

#追加列表,整个列表也被当成一个元素
l.append(['Ruby', 'SQL'])
print(l)

运行结果为:
['Python', 'C++', 'Java', 'PHP']
['Python', 'C++', 'Java', 'PHP', ('JavaScript', 'C#', 'Go')]
['Python', 'C++', 'Java', 'PHP', ('JavaScript', 'C#', 'Go'), ['Ruby', 'SQL']]

extend()方法添加元素

extend() 和 append() 的不同之处在于:extend() 不会把列表或者元祖视为一个整体,而是把它们包含的元素逐个添加到列表中。

extend() 方法的语法格式如下:

listname.extend(obj)

l = ['Python', 'C++', 'Java']

#追加元素
l.extend('C')
print(l)

#追加元组,元祖被拆分成多个元素
t = ('JavaScript', 'C#', 'Go')
l.extend(t)
print(l)

#追加列表,列表也被拆分成多个元素
l.extend(['Ruby', 'SQL'])
print(l)

运行结果:
['Python', 'C++', 'Java', 'C']
['Python', 'C++', 'Java', 'C', 'JavaScript', 'C#', 'Go']
['Python', 'C++', 'Java', 'C', 'JavaScript', 'C#', 'Go', 'Ruby', 'SQL']

insert()方法插入元素

append() 和 extend() 方法只能在列表末尾插入元素,如果希望在列表中间某个位置插入元素,那么可以使用 insert() 方法。

insert() 的语法格式如下:

listname.insert(index , obj)

其中,index 表示指定位置的索引值。insert() 会将 obj 插入到 listname 列表第 index 个元素的位置。

当插入列表或者元祖时,insert() 也会将它们视为一个整体,作为一个元素插入到列表中,这一点和 append() 是一样的。

l = ['Python', 'C++', 'Java']

#插入元素
l.insert(1, 'C')
print(l)

#插入元组,整个元祖被当成一个元素
t = ('C#', 'Go')
l.insert(2, t)
print(l)

#插入列表,整个列表被当成一个元素
l.insert(3, ['Ruby', 'SQL'])
print(l)

#插入字符串,整个字符串被当成一个元素
l.insert(0, "http://c.biancheng.net")
print(l)

输出结果为:
['Python', 'C', 'C++', 'Java']
['Python', 'C', ('C#', 'Go'), 'C++', 'Java']
['Python', 'C', ('C#', 'Go'), ['Ruby', 'SQL'], 'C++', 'Java']
['http://c.biancheng.net', 'Python', 'C', ('C#', 'Go'), ['Ruby', 'SQL'], 'C++', 'Java']

list列表修改元素

修改单个元素

直接对元素赋值即可

nums = [40, 36, 89, 2, 36, 100, 7]

nums[2] = -26  #使用正数索引

nums[-3] = -66.2  #使用负数索引

print(nums)

运行结果:
[40, 36, -26, 2, -66.2, 100, 7]

修改一组元素

nums = [40, 36, 89, 2, 36, 100, 7]

#修改第 1~4 个元素的值(不包括第4个元素)
nums[1: 4] = [45.25, -77, -52.5]

print(nums)

运行结果:

[40, 45.25, -77, -52.5, 36, 100, 7]

如果对空切片(slice)赋值,就相当于插入一组新的元素:

nums = [40, 36, 89, 2, 36, 100, 7]

#在4个位置插入元素
nums[4: 4] = [-77, -52.5, 999]

print(nums)

运行结果:

[40, 36, 89, 2, -77, -52.5, 999, 36, 100, 7]

使用切片语法赋值时,Python 不支持单个值,例如下面的写法就是错误的:

nums[4: 4] = -77

但是如果使用字符串赋值,Python 会自动把字符串转换成序列,其中的每个字符都是一个元素,请看下面的代码:

s = list("Hello")

s[2:4] = "XYZ"

print(s)

运行结果:

['H', 'e', 'X', 'Y', 'Z', 'o']

使用切片语法时也可以指定步长(step 参数),但这个时候就要求所赋值的新元素的个数与原有元素的个数相同,例如:

nums = [40, 36, 89, 2, 36, 100, 7]

#步长为2,为第1、3、5个元素赋值
nums[1: 6: 2] = [0.025, -99, 20.5]

print(nums)

运行结果:

[40, 0.025, 89, -99, 36, 20.5, 7]

list列表查找元素

index() 方法

index() 方法用来查找某个元素在列表中出现的位置(也就是索引),如果该元素不存在,则会导致 ValueError 错误,所以在查找之前最好使用 count() 方法判断一下。

index() 的语法格式为:

listname.index(obj, start, end)

其中,listname 表示列表名称,obj 表示要查找的元素,start 表示起始位置,end 表示结束位置。

start 和 end 参数用来指定检索范围:

  • start 和 end 可以都不写,此时会检索整个列表;
  • 如果只写 start 不写 end,那么表示检索从 start 到末尾的元素;
  • 如果 start 和 end 都写,那么表示检索 start 和 end 之间的元素。


index() 方法会返回元素所在列表中的索引值。

nums = [40, 36, 89, 2, 36, 100, 7, -20.5, -999]

#检索列表中的所有元素
print( nums.index(2) )

#检索3~7之间的元素
print( nums.index(100, 3, 7) )

#检索4之后的元素
print( nums.index(7, 4) )

#检索一个不存在的元素
print( nums.index(55) )

运行结果:

3

5

6

Traceback (most recent call last):
    File "C:\Users\mozhiyan\Desktop\demo.py", line 9, in <module>
        print( nums.index(55) )
ValueError: 55 is not in list

count()方法

count() 方法用来统计某个元素在列表中出现的次数,基本语法格式为:

listname.count(obj)

其中,listname 代表列表名,obj 表示要统计的元素。

如果 count() 返回 0,就表示列表中不存在该元素,所以 count() 也可以用来判断列表中的某个元素是否存在

nums = [40, 36, 89, 2, 36, 100, 7, -20.5, 36]

#统计元素出现的次数
print("36出现了%d次" % nums.count(36))

#判断一个元素是否存在
if nums.count(100):
    print("列表中存在100这个元素")
else:
    print("列表中不存在100这个元素")

运行结果:

36出现了3次

列表中存在100这个元素

range()快速初始化数字列表

range() 函数能够轻松地生成一系列的数字,range() 函数的用法是:让 Python 从指定的第一个值开始,一直数到指定的第二个值停止,但不包含第二个值

for value in range(1,5):
    print(value)

输出结果为:
1
2
3
4

range() 函数的返回值并不直接是列表类型(list)返回的是<class 'range'>。 需要list(range())

squares = []

for value in range(1,11):

    square = value**2

    squares.append(square)

print(squares)

print(type(range(1,11)))

print(type(squares))

运行结果为:

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

<class 'range'>

<class 'list'>

list列表实现栈和队列

  • 队列是,先存入的数据最先取出,即“先进先出”。
  • 栈是,最后存入的数据最先取出,即“后进先出”。

list实现队列

使用 list 列表模拟队列功能的实现方法是,定义一个 list 变量,存入数据时使用 insert() 方法,设置其第一个参数为 0,即表示每次都从最前面插入数据;读取数据时,使用 pop() 方法,即将队列的最后一个元素弹出。

#定义一个空列表,当做队列
queue = []

#向列表中插入元素
queue.insert(0,1)
queue.insert(0,2)
queue.insert(0,"hello")

print(queue)

print("取一个元素:",queue.pop())
print("取一个元素:",queue.pop())
print("取一个元素:",queue.pop())

运行结果为:
['hello', 2, 1]
取一个元素: 1
取一个元素: 2
取一个元素: hello

list实现栈

使用 list 列表模拟栈功能的实现方法是,使用 append() 方法存入数据;使用 pop() 方法读取数据。

append() 方法向 list 中存入数据时,每次都在最后面添加数据,这和前面程序中的 insert() 方法正好相反。

#定义一个空 list 当做栈
stack = []

stack.append(1)
stack.append(2)
stack.append("hello")

print(stack)

print("取一个元素:",stack.pop())
print("取一个元素:",stack.pop())
print("取一个元素:",stack.pop())

输出结果为:

[1, 2, 'hello']
取一个元素: hello
取一个元素: 2
取一个元素: 1

collections模块实现栈和队列

deque容器为一个给定类型的元素进行线性处理,像向量一样,它能够快速地随机访问任一个元素,并且能够高效地插入和删除容器的尾部元素。但它又与vector不同,deque支持高效插入和删除容器的头部元素,因此也叫做双端队列。

queueAndStack = deque()

queueAndStack.append(1)
queueAndStack.append(2)
queueAndStack.append("hello")

print(list(queueAndStack))

#实现队列功能,从队列中取一个元素,根据先进先出原则,这里应输出 1
print(queueAndStack.popleft())

#实现栈功能,从栈里取一个元素,根据后进先出原则,这里应输出 hello
print(queueAndStack.pop())

#再次打印列表
print(list(queueAndStack))

输出结果为:
[1, 2, 'hello']
1
hello
[2]

应用代码

id = [x for x in range(0, 10)]
price = [x for x in range(20, 30)]
products = list(zip(id, price))

print(products)

结果:

[(0, 20), (1, 21), (2, 22), (3, 23), (4, 24), (5, 25), (6, 26), (7, 27), (8, 28), (9, 29)]

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萌新待开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值