python容器类型——列表(list)

python容器类型——列表(list)

一、特点

  • 列表是处理一组有序项目的数据结构

  • 列表是python中最具灵活性的有序集合对象类型

  • 列表可以包含任何类型的对象:字符串、数字甚至其他列表

  • 列表是可变的数据类型,即这种类型的值是可以被修改的

二、定义

  • 列表通过方括号中用逗号分割的项目
  • 定义空列表
my_list = []
print(my_list)
#[]

my_list = [1, 2, 3, 4]
print(my_list)
# [1, 2, 3, 4]

print(my_list, type(my_list))
# [1, 2, 3, 4] <class 'list'>
  • 列表可装入python的任何对象
my_list = [1, 'a', 1.1, None, [1,2], False]
print(my_list)
# [1, 'a', 1.1, None, [1, 2], False]

三、列表的基本操作

1、索引

通过下标访问列表中的元素,下标从0开始计数,可取出一个元素

  • 正索引、负索引
print(mylist[3])
# None
print(mylist[-3])
# None

下标不能越界

超出索引值时会报IndexError错误

print(mylist[10])
IndexError                                Traceback (most recent call last)
Input In [20], in <cell line: 1>()
----> 1 print(mylist[10])

IndexError: list index out of range

2、切片

切片是通过下标访问列表中的元素,切片可以取出一个子列表

img

字符串的切片:split()函数,默认空格为分隔符,切片后放入列表中

mystr = "Hello Cali Today is Sunday"
mylist = mystr.split()
print(mylist, type(mylist))
# ['Hello', 'Cali', 'Today', 'is', 'Sunday'] <class 'list'>

切片包含开始,不包含结束切片取值 => 没有下标越界问题

正负切片
  • 正切片
i_list = [1,2,3,4]
my_list = ['apple','banana','orange',1,3.14,False,i_list]
print(my_list[0:3])
print(my_list[0:7:2])
print(my_list[2:])
print(my_list[:5])
print(my_list[:])
print(my_list[::])

#['apple', 'banana', 'orange']
#['apple', 'orange', 3.14, [1, 2, 3, 4]]
#['orange', 1, 3.14, False, [1, 2, 3, 4]]
#['apple', 'banana', 'orange', 1, 3.14]
#['apple', 'banana', 'orange', 1, 3.14, False, [1, 2, 3, 4]]
#['apple', 'banana', 'orange', 1, 3.14, False, [1, 2, 3, 4]]
  • 负切片
i_list = [1,2,3,4]
my_list = ['apple','banana','orange',1,3.14,False,i_list]
print(my_list[-1:-4])  #默认步长为1,起始位置有误时,切出来会是空
print(my_list[-1:-4:-1])
print(my_list[-4:-1])
print(my_list[7:0:-1])
print(my_list[7:0:-2])
print(my_list[::-1])
# []
# [[1, 2, 3, 4], False, 3.14]
# [1, 3.14, False]
# [[1, 2, 3, 4], False, 3.14, 1, 'orange', 'banana']
# [[1, 2, 3, 4], 3.14, 'orange']
# [[1, 2, 3, 4], False, 3.14, 1, 'orange', 'banana', 'apple']
slice函数

slice函数的用途:生成一个slice对象,相当于可以给要切的内容取个名字。

my_list = ['apple','banana','orange',1,3.14,False,i_list]
print(my_list[0:3:1])
fruit = slice(0,3,1)
print(my_list[fruit])
#['apple', 'banana', 'orange']
#['apple', 'banana', 'orange']
练习

img

a = ['apple', 'orange', 123, 0.111, 'cali']

print(a[1:])
# ['orange', 123, 0.111, 'cali']

print(a[2:6])	# 切片可以越界
# [123, 0.111, 'cali']

print(a[1:-3])
# ['orange']

print(a[0],a[-1])
print(a[0::4])
# apple cali
#['apple', 'cali']

print(a[:])
# ['apple', 'orange', 123, 0.111, 'cali']

3、增加

append
  • 在末尾,作为整体追加,类型不限
help(a.append)

Help on built-in function append:

append(object, /) method of builtins.list instance
    Append object to the end of the list.
my_list = ['apple','banana','orange',1,3.14,False]
my_list2 = ['a','b','c']
print(my_list)
my_list.append('i am xiaowei')
print(my_list)
my_list.append(my_list2)
print(my_list)


#['apple', 'banana', 'orange', 1, 3.14, False]
#['apple', 'banana', 'orange', 1, 3.14, False, 'i am xiaowei']
#['apple', 'banana', 'orange', 1, 3.14, False, 'i am xiaowei', ['a', 'b', 'c']]
  • 使用mylist.append()之后会自动把结果返回给mylist,不需要手动重新赋值
insert
  • 在index位置插入数据, 2个参数(索引,插入的元素)
help(mylist.insert)

Help on built-in function insert:

insert(index, object, /) method of builtins.list instance
    Insert object before index.
print(my_l
my_list = ['apple','banana','orange',1,3.14,False]
print(my_list)
my_list.insert(1,True)
print(my_list)
my_list.insert(1,'abc')
print(my_list)
      
#['apple', 'banana', 'orange', 1, 3.14, False]
#['apple', True, 'banana', 'orange', 1, 3.14, False]
#['apple', 'abc', True, 'banana', 'orange', 1, 3.14, False]
extend
  • 扩展,将1个列表里的内容扩展到另外一个列表里去

  • 只限可转为list的类型( str, list, tuple )

help(a.extend)

Help on built-in function extend:

extend(iterable, /) method of builtins.list instance
    Extend list by appending elements from the iterable.
my_list = ['apple','banana','orange',1,3.14,False]
my_list2 = ['a','b','c']
my_str = 'abc'
my_list.extend(my_list2)
print(my_list)
my_list.extend(my_str)
print(my_list)

#['apple', 'banana', 'orange', 1, 3.14, False, 'a', 'b', 'c']
#['apple', 'banana', 'orange', 1, 3.14, False, 'a', 'b', 'c', 'a', 'b', 'c']
my_list.extend(82)
print(my_list)
# TypeError: 'int' object is not iterable

int 不是可迭代对象 =》迭代 -》依次从对象中取出元素

extend和+的区别

extend会对mylist做修改

+ 会产生一个新的列表 ,不会对mylist做修改

my_list = ['apple','banana','orange',1,3.14,False]
my_list2 = ['a','b','c']

#['apple', 'banana', 'orange', 1, 3.14, False, 'a', 'b', 'c']

使用‘+’时,只能连接两个相同类型的元素

my_list+"abc"
# TypeError: can only concatenate list (not "str") to list

4、删除

pop
  • 删除元素,默认最后一个(指定index删除)

  • 指定索引

  • 使用pop函数后会返回删除掉的元素

help(list.pop)

Help on method_descriptor:

pop(self, index=-1, /)
    Remove and return item at index (default last).
    
    Raises IndexError if list is empty or index is out of range.
my_list = ['apple','banana','orange',1,3.14,False]
print(my_list)
t = my_list.pop()
print(t,my_list)
t = my_list.pop(2)
print(t,my_list)

#['apple', 'banana', 'orange', 1, 3.14, False]
#False ['apple', 'banana', 'orange', 1, 3.14]
#orange ['apple', 'banana', 1, 3.14]
remove
  • 指定删除的数据

  • 删除指定的元素(要删除的数据不存在时,会出错)

  • 使用remove函数不会有返回值

help(list.remove)

Help on method_descriptor:

remove(self, value, /)
    Remove first occurrence of value.
    
    Raises ValueError if the value is not present.
my_list = ['apple','banana','orange',1,3.14,False]
my_list.remove('apple')
print(my_list)
my_list.remove('apple1')
print(my_list)

['banana', 'orange', 1, 3.14, False]
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Input In [53], in <cell line: 4>()
      2 my_list.remove('apple')
      3 print(my_list)
----> 4 my_list.remove('apple1')
      5 print(my_list)

ValueError: list.remove(x): x not in list
del
  • 根据下标删除

  • del是命令,不是内置函数

  • del是python的一个关键字,用于删除变量(的引用)

my_list = ['apple','banana','orange',1,3.14,False]
print(my_list)
del my_list[1]
print(my_list)
del my_list[1:2]
print(my_list)
del my_list[10]
print(my_list)

#['apple', 'banana', 'orange', 1, 3.14, False]
#['apple', 'orange', 1, 3.14, False]
#['apple', 1, 3.14, False]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
Input In [58], in <cell line: 7>()
      5 del my_list[1:2]
      6 print(my_list)
----> 7 del my_list[10]
      8 print(my_list)

IndexError: list assignment index out of range

del也可以直接删除列表

del my_list3
print(my_list3)
# NameError: name 'mylist3' is not defined
clear
  • 清空列表
print(mylist3)
# ['weihong', 'liyili']

mylist3.clear()
print(mylist3)
# []

5、修改

修改元素主要是利用下标和切片来修改或增加、删除

1、直接利用下标修改元素
mylist = ['banana', 'orange', 1, 2, 3, 'apple', 'cali', 'leimingtao', 'xiaowei', 'b']
print(mylist)
# ['banana', 'orange', 1, 2, 3, 'apple', 'cali', 'leimingtao', 'xiaowei', 'b']

mylist[2] = "liu"
print(mylist)
# ['banana', 'orange', 'liu', 2, 3, 'apple', 'cali', 'leimingtao', 'xiaowei', 'b']
2、用切片修改列表中的元素
mylist[3:5] = ["shenjiemi", "xiejiaxing"]
print(mylist)
# ['banana', 'orange', 'liu', 'shenjiemi', 'xiejiaxing', 'apple', 'cali', 'leimingtao', 'xiaowei', 'b']
3、也可以使用切片增加列表中的元素
mylist[-1:] = ["lili", "xiaoqian", "xiaoming"]
print(mylist)
# ['banana', 'orange', 'liu', 'shenjiemi', 'xiejiaxing', 'apple', 'cali', 'leimingtao', 'xiaowei', 'lili', 'xiaoqian', 'xiaoming']
4、使用切片删除列表中的元素
mylist[0:5]=""
print(mylist)
# ['apple', 'cali', 'leimingtao', 'xiaowei', 'lili', 'xiaoqian', 'xiaoming']

mylist[0:5]=[]
print(mylist)
# ['xiaoqian', 'xiaoming']
5、print(mylist[1:1])

返回的值为空[],此时这个位置在第二个位置

使用切片方法时,字符串是可迭代对象、一个个取出来加进去

mylist[1:1]="abc"	# 在第二个位置插入元素
print(mylist)
# ['xiaoqian', 'a', 'b', 'c', 'xiaoming']
mylist[1:1] = "abc"  # 批量在指定位置增加数据
mylist[0:5] = ""    # 批量指定下标的删除数据
print(mylist)
# ['b', 'c', 'xiaoming']

6、反转

reverse
mylist.reverse()
print(mylist)
# ['xiaoming', 'c', 'b']
切片方法
print(mylist[::-1])
# ['b', 'c', 'xiaoming']

7、排序

sort

列表中的元素必须是相同类型的才能排序、默认为升序

mylist = [3, 5, 18, -1, -3]
mylist.sort()
print(mylist)
# [-3, -1, 3, 5, 18]

排序之后使用reverse可以使结果反转,即降序排列

mylist = [3, 5, 18, -1, -3]
mylist.sort(reverse=True)
print(mylist)
mylist.sort(reverse=False)
print(mylist)

#[18, 5, 3, -1, -3]
#[-3, -1, 3, 5, 18]
mylist = ["apple", "orange", "banana"]
mylist.sort()
print(mylist)
# ['apple', 'banana', 'orange']

不同类型的元素排序会报错

mylist = ['a', 1, 2, 3]
mylist.sort()
# TypeError: '<' not supported between instances of 'int' and 'str'

8、统计

len
  • 计算列表中元素的个数

  • 不用输出,直接返回值

mylist = ['a', 1, 2, 3]
len(mylist)
# 4
count
  • 计算某个元素在列表中出现的次数
  • 会有返回值
my_list = ['a', 'b', 'c', 'd', 'a', 'b', 'd', 'java', ['liu', 'cali', 123, 456], 'C', 'a']
print(my_list)
my_list.count('a')

#['a', 'b', 'c', 'd', 'a', 'b', 'd', 'java', ['liu', 'cali', 123, 456], 'C', 'a']
#3
index
  • 找出某个元素在列表中第一次出现的下标位置
  • 会有返回值
my_list = ['a', 'b', 'c', 'd', 'a', 'b', 'd', 'java', ['liu', 'cali', 123, 456], 'C', 'a']
#['a', 'b', 'c', 'd', 'a', 'b', 'd', 'java', ['liu', 'cali', 123, 456], 'C', 'a']
my_list.index("a")
# 0

my_list.index("java")
# 7

9、练习

img

mylist1 = ['python','java','c']

mylist1.append('我是追加')
print(mylist1)

del mylist1[0::3]
print(mylist1)

print('cali' in mylist1)

print(len(mylist1))

mylist1.insert(1,['liu','cali',123,456])
print(mylist1)

#['python', 'java', 'c', '我是追加']
#['java', 'c']
#['java', ['liu', 'cali', 123, 456], 'c']
#False
#3

10、遍历列表

  • 遍历:依次取出对象中的每一项数据

  • list是一个可迭代对象(iterable),可以直接用for遍历

print(mylist5)
# ['a', 'b', 'c', 'd', 'a', 'b', 'd', 'java', ['liu', 'cali', 123, 456], 'C', 'a']

for item in mylist5:
    print(item)
    
a
b
c
d
a
b
d
java
['liu', 'cali', 123, 456]
C
a
enumerate
  • 枚举

  • enumerate多用于在for循环中得到计数,利用它可以同时获得索引和值,即需要index和value值的时候可以使用

for item in enumerate(mylist5):
    print(item)
    
(0, 'a')
(1, 'b')
(2, 'c')
(3, 'd')
(4, 'a')
(5, 'b')
(6, 'd')
(7, 'java')
(8, ['liu', 'cali', 123, 456])
(9, 'C')
(10, 'a')

11、判断成员关系

判断列表中是否有某个数据

print(mylist5)
# ['a', 'b', 'c', 'd', 'a', 'b', 'd', 'java', ['liu', 'cali', 123, 456], 'C', 'a']
print("Java" in mylist5)
# False
print("java" in mylist5)
# True

12、类型转换

1、list将字符串(str)转列表(list)
mystr = "abc"
print(list(mystr))
# ['a', 'b', 'c']
2、利用join函数将列表转字符串
mylist = ['a', 'b', 'c']
mystr = "".join(mylist)
print(mystr)
# abc

练习

img

nums = [2, 7, 11, 15]
target = 9
lens = len(nums)
j=-1
for i in range(lens):
    if (target - nums[i]) in nums:
        if (nums.count(target - nums[i]) == 1)&(target - nums[i] == nums[i]):#如果num2=num1,且nums中只出现了一次,说明找到是num1本身。
            continue
        else:
            j = nums.index(target - nums[i],i+1) #index(x,i+1)是从num1后的序列后找num2
            break
if j>0:
    print([i,j])
else:
    print([])
 
# [0, 1]
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Pod️

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

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

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

打赏作者

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

抵扣说明:

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

余额充值