[Python3] 006 列表的基本使用 2

目录

一个篱笆三个桩,list 有……好多个桩

1. 列表的小伙伴们

(1) 召唤小伙伴

  • dir(list) —— 列出能帮助 list 的方法或函数
  • help(list) —— 查看这些“小伙伴们”的具体用法
    • help() 可以“私聊”,如 help(list.append) 可以仅查看 append() 的用法

(2) 我给“他们”分了个组

  • “增小组”
  • “删小组”
  • “整队组”
  • 其他组
    • 计数君
    • 测量君
    • 索引君
    • 拷贝君

2. 小伙伴们的“才艺展示”

(1) “增小组”——往列表里添加数据

# 例1 append()

list1 = [0, 2, 4, 6, 8]

print(list1.append(10))
print(list1)
print(list1.append(12, 14))
  • 输出结果

None

[0, 2, 4, 6, 8]

TypeError……append() takes exactly one argument (2 given)

None 是 append() 返回的。

append() 能且仅能在列表末尾加 1 个数据,多加报错。

输入类型不匹配(省略号:此处略去若干)append() 只能放 1 个数,而你放了 2 个。


# 例2.1 extend()

list2 = [0, 2, 4, 6, 8]

list2.extend([10])
print(list2)

list2.extend([12, 14])
print(list2)

list2.extend(15)
print(list2)
  • 输出结果

[0, 2, 4, 6, 8, 10]

[0, 2, 4, 6, 8, 10, 12, 14]

TypeError……'int' object is not iterable

extend() 可以向列表中加 1 个数据,也可以加多个数据,但要用 [] 框起来。

最后的报错显示 'int' 不可迭代。


# 例2.2

# 接上面,看看 'str' 行不行
list2.extend('15')
print(list2)
  • 输出结果

[0, 2, 4, 6, 8, 10, 12, 14, '1', '5']

不报错,但不是理想结果。


# 例2.3

# 接上面
list2.extend('15', '17')
print(list2)
  • 输出结果

TypeError……extend() takes exactly one argument (2 given)

报的错与 例1 相似。

综上,我们看到 extend() 能加入多个数据;但对 Python 来说,extend() 只是加入了 1 个列表。


# 例3.1 “插队”的 insert()

list3 = [0, 1, 2, 3, 4, 5, 6]

list3.insert(3, "YorkFish")     # 例2.2 告诉我们列表中除了数字,还能放别的
print(list3)
  • 输出结果

[0, 1, 2, 'YorkFish', 3, 4, 5, 6]

'YorkFish' 被夹在原下标 2 与 原下标 3 的两个数据之间(脑海里突然冒出“夹逼准则”),成为新的下标为 3 的数据。


# 例3.2

list3 = [0, 1, 2, 3, 4, 5, 6]

list3.insert(18, "YorkFish")    # 看看超出列表长度,Python 怎么处理
print(list3[8])
  • 输出结果

[0, 1, 2, 3, 4, 5, 6, 'YorkFish']

IndexError……list index out of range

超出列表长度,自动排到对尾。

报的错为索引错误,在此印证排到队尾,没有开辟下标 8 到下标 18 的空间。


注意

# 补充

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

print(id(list100))
print(list100)
print('-'*20)

list100.append('A1')
print(id(list100))
print(list100)
print('-'*20)

list100.extend([7, 8, 9])
print(id(list100))
print(list100)
print('-'*20)

list100.insert(0, '0')
print(id(list100))
print(list100)
  • 输出结果

2926768964872

[1, 2, 3, 4, 5]

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

2926768964872

[1, 2, 3, 4, 5, 'A1']

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

2926768964872

[1, 2, 3, 4, 5, 'A', 7, 8, 9]

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

2926768964872

['0', 1, 2, 3, 4, 5, 'A', 7, 8, 9]

综上,“增小组”是在原列表的基础上直接操作。


(2) “删小组”——“增小组”的对手

# 例4 pop()

list4 = [0, 1, 2, 3, 4, 5, 6]

n1 = list4.pop()
n2 = list4.pop(2)
print(n1)
print(n2)
print(list4)
n3 = list4.pop(18)
  • 输出结果

6

2

[0, 1, 3, 4, 5]

IndexError……pop index out of range

pop() 默认弹出队尾元素,在括号里指定位置,如果有,则弹出对应数值。

若给 pop() 的下标值超标,则会有以上报错。


# 例5 remove()

list5 = [0, 'A', 'B', 66, 'D', 66, 'E', 100]

n1 = list5.remove(66)
print(n1)
print(list5)

list5.remove('C')
  • 输出结果

None

[0, 'A', 'B', 'D', 66, 'E', 100]

ValueError……list.remove(x): x not in list

与 pop() 不同,revome() 返回的是 None。

remove() 不指定下标,想删什么,写到括号里。如果列表中恰有 1 个,就删了它;如果列表中不止 1 个,就删掉下标值最小的那个;如果列表中没有,报上述错误。


# 例6 “清空大师” clear() 是个“狠人”

list6 = [0, 1, 2, 3, 4, 5, 6]

print(list6)
list6.clear()
print(list6)
  • 输出结果

[0, 1, 2, 3, 4, 5, 6]

[]

clear() 可清空列表。


# 例7 “清除大师” del 是个“狼人”,因为他比 clear() 要狠一点

list7 = [0, 1, 2, 3, 4, 5, 6]

print(list7)
del list7
print(list7)
  • 输出结果

[0, 1, 2, 3, 4, 5, 6]

NameError……name 'list7' is not defined

报的错显示 list7 没有被定义,说明 del 能删除整个列表。


注意

  • pop() 和 remove() 与“增小组”一样,是在原列表的基础上直接操作。

3) “整队组”——给列表“洗牌”

# 例8 reverse()

list8 = [0, 1, 2, 3, 4, 5, 6]

list8.reverse()
print(list8)
  • 输出结果

[6, 5, 4, 3, 2, 1, 0]

reverse() 可将列表“翻转”。


# 例9 sort()

list9_1 = [6, 5, 4, 3, 2, 1, 0]
list9_2 = [8, 3, 7, 2, 1, 4, 9, 3]

list9_1.sort()
list9_2.sort()
print(list9_1)
print(list9_2)
  • 输出结果

[0, 1, 2, 3, 4, 5, 6]

[1, 2, 3, 3, 4, 7, 8, 9]

sort() 可将列表按从小到大排序,数字大小相等就相邻排放。

可与 reverse() 组合使用,使数据倒序输出。


4) 其他组

  • 计数君
# 例10 count()

list10 = [4, 8, 3, 7, 3, 1, 4, 9, 3]

print(list10)
list10_count = list10.count(3)
print(list10_count)
print(list10.count(4))
  • 输出结果

[4, 8, 3, 7, 3, 1, 4, 9, 3]

3

2


  • 测量君
# 例11 多才多艺的 len()

list11 = [0, 2, 3, 6, 6, 4, 2, 5, 7, 6, 43, 34]

print(len(list11))  # 测量列表长度
  • 输出结果

12

我说 len() 多才多艺是因为他还能测别的,挖个坑,日后写篇“总结”,编号 Py006-1。


  • 索引君
# 例12.1 index()

list12 = [0, 2, 3, 6, 6, 4, 2, 5, 7, 6, 43, 34]

print(list12.index(3))
print(list12.index(6))
print(list12.index(8))
  • 输出结果

2

3

ValueError……8 is not in list

括号内放目标索引值,若有,输出在列表中的位置下标;若无,报错。

索引君有个朋友不报错,挖个坑,日后填,编号 Py006-2。


# 例12.2 index()

list12 = [0, 2, 3, 6, 6, 4, 2, 5, 7, 6, 43, 34]

start = list12.index(6) + 1         # 得到第一个 6 的后一个元素的下标
stop = len(list12)                  # 得到列表长度
print(list12.index(6, start, stop)) # 得到第二个 6 的下标
  • 输出结果

4

第二个 6 的下标为 4。


  • 拷贝君
# 例13 copy()

list13_1 = [0, 1, 2, 3, 4, 5, 6]

list13_2 = list12_1.copy()

print(list13_1)
print(id(list13_1))

print(list13_2)
print(id(list13_2))
print("-"*20)


list13_2[3] = 333
print(list13_1)
print(list13_2)
  • 输出结果

[0, 1, 2, 3, 4, 5, 6]

2926769264008

[0, 1, 2, 3, 4, 5, 6]

2926769325960

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

[0, 1, 2, 3, 4, 5, 6]

[0, 1, 2, 333, 4, 5, 6]

copy() 解决了赋值共用数据的尴尬。


挖坑:“深拷贝”与“浅拷贝”,编号 Py006-3。

猜你喜欢

转载自www.cnblogs.com/yorkyu/p/10250788.html