0
点赞
收藏
分享

微信扫一扫

【Class 26】《Python编程快速上手》 查缺补漏二 第四章列表


第四章



del list[n]​ : 列表中的元素,可以使用del 删除,举例: del list_test[2]



多重赋值 a , b ,c ,d = [1, 2, 3, 4] <====> a=1, b=2, c=3, d=4



index()​ 查找元素再列表中的位置,举例: list_test.index[ ‘hello’ ]
注意:如果列表中存在重复的值,就返回它第一次出现的下标。



append( ‘xxxx’ )​ 方法:列表末尾添加元素



insert(n, ‘xxxx’)​ 方法:再列表中第 n 处添加元素



remove(‘xxxx’)​ 方法:
如果元素再列表中出现多次,则默认只会将第一次出现的地方删除。
如果元素不存在,删除时会报 ValueError 的值



sort( )​ 将列表中的值排序, reverse=True: 逆序排序, 默认为 reverse=False: 正序排序



list_ = [2, 5, 3, 6, 13]

# 默认为False, 正序排序
list_.sort()
print(list_) # [2, 3, 5, 6, 13]

# 强制为 逆序排序
list_.sort(reverse=True)
print(list_) # 3, 6, 5, 3, 2]

字符串排序:

spam = ['Alice', 'ants', 'Bob', 'badgers', 'Carol', 'cats']

# 默认按照 ASCII 字符顺序排序
spam.sort()
print(spam) # ['Alice', 'Bob', 'Carol', 'ants', 'badgers', 'cats']

# 按照普通字典顺序排序,A-a B-b ....Z-z
spam.sort(key=str.lower)
print(spam) # ['Alice', 'ants', 'badgers', 'Bob', 'Carol', 'cats']
  1. 代码缩进规则 ① 大多数情况下,代码行的缩进告诉 python 它属于哪一个代码块。
    ② 列表: 可以跨越几行,并且不会在意括号中的缩进,python 没有看到结束方括号,就表明列表没有结果
import random

messages = ['It is certain',
'It is decidedly so',
'Yes definitely',
'Reply hazy try again',
'Ask again later',
'Concentrate and ask again',
'My reply is no',
'Outlook not so good',
'Very doubtful']

print(messages[random.randint(0, len(messages) - 1)])


字符串为不可变数据,尝试对字符串中的某个字符进行操作,将导致 TypeError 的错误。
改变一个字符串争取的方式时,使用切片 和 连接, 构成一个‘新’ 的字符串



元组 数据几乎和列表数据一样,但 元组和字符串一样,是属于不可变的数据。
元组tuple 列表list ====> list( list(‘cat’, ‘dog’, 5) ) == [‘cat’, ‘dog’, 5]
列表list 转 元组tuple ====> tuple([‘cat’, ‘dog’, 5]) == (‘cat’, ‘dog’, 5)
字符串str 转 列表list ====> list( ‘hello’ ) == [‘h’, ‘e’, ‘l’, ‘l’, ‘o’]



引用 ( python ID 相同 )
python 中判定 变量是否是同一个,使用 id 来判定



>>> spam = 42
>>> id(spam)
140729543878768
>>> cheese = spam # 从ID 可以看除,变量的赋值其实也看作是一个引用的过程,不过它不稳定,当再次被赋值时,会变成另一个ID
>>> id(cheese)
140729543878768
>>>
>>> cheese
42
>>> spam = 32 # 再次赋值
>>> spam
32
>>> cheese
42
>>> id(spam) # spam 变成了另一个 ID
140729543878448
>>> id(cheese) # cheese 还是保留为原来的ID
140729543878768

列表的引用, 赋值时其实是copy的列表引用, 从ID 可以看除 spam 和 cheese 指向的是同一个 id

>>> spam = [1, 2, 3, 4]
>>> cheese = spam
>>> id(spam)
2881996704008
>>> id(cheese)
2881996704008
>>>
>>> cheese[2] = 'hello'
>>> spam
[1, 2, 'hello', 4]
>>> cheese
[1, 2, 'hello', 4]
>>>
>>> id(cheese)
2881996704008
>>> id(spam)
2881996704008
  1. 传递引用, --------类似其他语言的指针
def eggs(someParameter):
someParameter.append('Hello')

spam = [1, 2, 3]
eggs(spam)
print(spam) # [1, 2, 3, 'Hello']
  1. copy 模块的 copy.copy() 和 copy.deepcopy()
    前面说了 列表和字典 直接用 = 赋值, 复制的是它的引用,而不是它的内容。
    如果我们希望 复制 它原本的内容,则应该用 copy.copy() 和 copy.deepcopy() 来赋值
    copy.copy(): 可以用来复制列表或字典这样的可变值,而不只是复制引用。
    copy.deepcopy(): 如果要复制的列表,同时内部还嵌套包含了列表, 将同时复制它们内部的列表

看到书中有个实践题目:童心大发,来玩玩:

4.10.1 逗号代码

假定有下面这样的列表:

spam = [‘apples’, ‘bananas’, ‘tofu’, ‘cats’]

编写一个函数,它以一个列表值作为参数,返回一个字符串。

该字符串包含所有表项,表项之间以逗号和空格分隔,并在最后一个表项之前插入 and。

例如,将前面的 spam 列表传递给函数,将返回’apples, bananas, tofu, and cats’。但你的函数应该能够处理传递给它的任何列表。

======》

这道题目如果用我们的for 等循环来实现,非常简单,那就没意思了

我们来增加一点难度,

要求:
1. 必须使用递归函数来实现
2. 可以实现正序或者逆序累加
3. 传入的列表不限制长度,并且 maybe 无限长的list。

想想应该如何实现呢? 是不是修改题目后变得有意思多了呢?

答案见下篇博客:

《【Class 27】童心大发 通过递归函数 解决 python实践题目》

【Class 26】《Python编程快速上手》 查缺补漏二  第四章列表_python

好污啊!!!

【Class 26】《Python编程快速上手》 查缺补漏二  第四章列表_赋值_02



举报

相关推荐

第四章编程练习

第四章

0 条评论