列表操作与列表方法


一、列表的基本操作

列表可以使用所有适用于序列的藨草操作,例如索引、分片、连接与乘法(序列操作见前文),但是列表还有一些属于自己的操作方法,如修改列表本身的操作,字儿写操作包括元素赋值、元素删除、分片赋值以及列表方法等。


1、列表元素赋值

如果需要修改列表中的某一个元素,可以使用像数组一样对列表中的特定元素赋值,也就是使用一对中括号指定列表中的索引,然后使用赋值运算符(=)进行赋值。

1、修改列表中的元素值
s=['Bill','Mike','John']
s[0]=20
s[1]='Mary'
print(s)
输出结果:
[20, 'Mary', 'John']

在上面的代码中,通过列表的元素赋值操作修改了列表中的元素值。
在列表元素赋值的操作中,列表索引可以是负数,在这种情况下会从列表的最后一个元素算起,例如:s[-1]表示列表的最后一个元素,s[-2]表示列表的倒数第二个元素,不过不管列表索引是整数还是负数,超出索引都会抛出异常

s=['Bill','Mike','John']
#修改列表的最后一个元素2
s[-1]=10
s[-3]='钢铁侠'#-3对应是第一个元素
print(s)
#超出索引会抛出异常,3超出了索引
s[3]='蜘蛛侠'#超出索引,抛出异常
print(s)
输出结果:
['钢铁侠', 'Mike', 10]
---------------------------------------------------------------------------
IndexError                          Traceback (most recent call last)
<ipython-input-4-04a98bc6ae01> in <module>()
      5 print(s)
      6 #超出索引会抛出异常,3超出了索引
----> 7 s[3]='蜘蛛侠'#超出索引,抛出异常
      8 print(s)

IndexError: list assignment index out of range

2、删除元素

从列表中删除元素很容易就能做到,使用del就可以实现

s=['Bill','Mike','John']
num=[1,2,3,4,5,6,7,8,9]
del num[9]
print(num)
del s['Bill']
print(s)
输出结果:
[2, 3, 4, 5, 6, 7, 8, 9]
['Bill', 'Mike']

3、分片赋值

分片赋值和分片获取子列表一样,也需要使用分片操作,也就是需要指定要操作的列表的范围。

1、本例将利用分片赋值将列表中的子序列表替换成其他列表,并使用list函数将字符串分解成由字符串租场的列表,并替换字符串的一部分
s=['year','hello','world']
s[1:]=['a','b','c']
print(s)
name=list['Mike']
print(name)
name[1:]=list('ary')
print(name)
输出结果:
['year', 'a', 'b', 'c']
['M', 'i', 'k', 'e']
['M', 'a', 'r', 'y']

上面的代码使用了分片赋值对原列表进行了赋值操作,可以看到分片赋值是用另一个另一个列表来修改列表中的子列表。也就是将原来的列表中的子序列替换成另外一个子列表。而且在赋值时,被替换的子列表和新的子列表可以不等长。
可以利用这个特性在列表中菜如也列表或删除一些列表元素。

2、本例将利用分片赋值在列表num中插入一个列表,并删除一些列表
num=[1,6,7]
#在列表中插入一个列表
num[1:1]=[2,3,4,5]
print(num)
num[1:4]=[]
print(num)
输出结果:
[1, 2, 3, 4, 5, 6, 7]
[1, 5, 6, 7]

在上面的代码中,使用分片赋值操作列表num中的1和6之间插入列表[2,3,4,5]。num[1:1]中冒号(:)前面的数字表示要替换的子列表的第一个元素在父序列中的索引而冒号后面的数字表示子列表下一个元素在父序列中的索引,所以冒号前后两个数字相等,表示不替换列表中的任何元素,直接在冒号前面的数字表示的索引的位置插入一个新的列表。最后使用分片赋值将第2、3、4、个元素替换成空列表,所以最后num列表的值是[1,5,6,7]

二、列表方法

在前面主要介绍的是函数,这里接触的是一个新的概念:方法。其实方法和函数非常类似,只是函数是全局的,而方法需要定义在类中,需要通过对象引用。类和对象将会在后续学习。
引用一个对象需要使用格式:对象.方法(参数)
在调用方法是,除了对象要放到方法前面,方法调用与函数调用类似。列表提供了一些方法用于检查和修改列表中的内容。

  1. append:在列表最后插入新的值
  2. clear:用于消除列表的内容
  3. copy:用于复制一个列表
  4. count:用于统计某个元素在列表中出现的次数
  5. extend:用于在列表结尾植入一个新的列表,也就是用新的列表扩展愿挨的列表。有点类似列表相加。不过extend方法改变的是被扩展的列表,而列表相加产生了一个新的列表。
  6. index:用于从列表中找出某个值第一次出现的索引位置。。
  7. insert:用于将值插入到指定位置
  8. pop:用于移除列表中的元素(默认是最后一个元素),并返回该元素的值。
  9. remove:用于移除列表中某个值的第一次匹配项。
  10. reverse:用于将列表元素反向存放
  11. sort:用于对列表排序,调用该方法会改变原来的列表。
1、测试append方法
num=[1,2,3,4]
num.append(5)
print(num)
num.append(6,7,8)
print(num)
#输出结果:
#[1, 2, 3, 4, 5]
#[1, 2, 3, 4, 5, [6, 7, 8]]
2、测试clear方法
names=['Bill ','Mary','Jack']
print(names)
names.clear()
print(names)
#输出结果:
#['Bill ', 'Mary', 'Jack']
#[]
3、测试copy方法
a=[1,2,3]
b=a
b[1]=30
print(a)

aa=[1,2,3]
bb=aa.copy
bb[1]=30
print(aa)
'''
[1, 30, 3]
[1, 2, 3]
需要注意单纯的赋值操作改变的只是指针,并没有,所以当b变化之后a列表也发生了变化。而赋值操作创建的是一个新的列表,所以改变b之后不会改变a
'''

4、测试count方法
serch=['as','cv','df','as','hg','df',[1,2,3],[1,2,1]]
print(search.count('as'))
print(search.count([1,2,3]))
#输出结果:
#2
#1

5、测试extend方法
a=[1,2,3]
b=[4,5,6]
a.extend(b)
print(a)
#输出结果:
#[1, 2, 3, 4, 5, 6]

如果使用列表连接操作,效率会更低,不建议使用
a=[1,2,3]
b=[4,5,6]
print(a+b)
#输出结果:
#[1, 2, 3, 4, 5, 6]

可以使用分片赋值的方法实现同样的效果
a=[1,2,3]
b=[4,5,6]
a[len(a):]=b
print(a)
#输出结果:
#[1, 2, 3, 4, 5, 6]

7、测试index方法
s=['I','love','python']
print(s.index(python))
#输出结果:
#2

8、测试insert方法
num=[1,2,3,4,5]
num.insert(3,'four')
print(num)
#[1, 2, 3, 'four', 4, 5]

9、测试pop点
num=[1,2,3]
print(num.pop())
print(num.pop(0)
#输出结果:
#3
#1

10、测试remove方法
words=['he','word','ok','yes']
word.remove('he')
print(word)
#['word', 'ok', 'yes']

11、测试reverse方法
num=[1,2,3,4,5,6]
num.reverse()
print(num)
#输出结果:
#[6, 5, 4, 3, 2, 1]

12、测试sort方法
num=[4,3,5,7,2,8,9]
num.sort()
print(num)
#输出结果:
#[2, 3, 4, 5, 7, 8, 9]

values=[4,6,2,8,'aa','bb']
#待排序的元素必须是可比较的,字符串和数值类型不能直接比较,否则会抛出异常
values.sort()
'''
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-30-3421ed273c01> in <module>()
      1 values=[4,6,2,8,'aa','bb']
      2 #待排序的元素必须是可比较的,字符串和数值类型不能直接比较,否则会抛出异常
----> 3 values.sort()

TypeError: '<' not supported between instances of 'str' and 'int'
'''
#使用sort方法排序,会直接修改原列表,入股相对列表的副本进行排序,可以使用下面的代码
x=[5,3,6,8,9]
y=x[:]
y.sort()
print(x)
print(y)
#输出结果:
[5, 3, 6, 8, 9]
[3, 5, 6, 8, 9]

方法2:使用sorted函数
x=[7,6,4,8,5]
y=sorted(x)
print(y)
print(x)
#输出结果:
#[4, 5, 6, 7, 8]
#[7, 6, 4, 8, 5]

#sorted函数可以对任何序列进行排序,例如对字符串排序
print(sorted('esdfgrt'))
#['d', 'e', 'f', 'g', 'r', 's', 't']

x=[5,3,6,8,2]
x.sort(reverse=True)
print(x)
#[8, 6, 5, 3, 2]

总结

主要介绍两个内容,列表的基本操作,包括列表元素赋值、删除列表元素、分片赋值等。此外介绍方法的概念,重点介绍了列表中的几个常用的方法。主要包括append、clear、copy、count、extend、index、insert、pop、remove、reverse、sort方法等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值