1. 程式人生 > >python3中常用的列表方法(method)

python3中常用的列表方法(method)

答案 列表推導 復制對象 判斷 水仙花 素數 構造 改變 ted

python3中常用的列表方法(method)
詳見: >>> help(list)

文檔見: python_base_docs/list_xxxx.html

深拷貝和淺拷貝
淺拷貝 shallow copy
示例:
L = [3.1, 3.2]
L1 = [1, 2, L] # L1 = [1, 2, [3.1, 3.2]]
L2 = L1.copy() # 淺拷貝 L2 = [1, 2, [3.1, 3.2]]
print(L1)
print(L2)
L1[2][0] = 3.14 # 改變L列表裏的第0個元素
print(L1)
print(L2)

深拷貝 deep copy
深拷貝是指在復制對象時,將對象的關聯的對象也一同復制

示例:
import copy # 導入復制模塊
L = [3.1, 3.2]
L1 = [1, 2, L] # L1 = [1, 2, [3.1, 3.2]]
L2 = copy.deepcopy(L1) # 深拷貝
print(L1)
print(L2)
L1[2][0] = 3.14 # 改變L列表裏的第0個元素
print(L1)
print(L2)

註:
深拷貝通常只對含有可變對象的對象進行復制, 不可變對象通常不變

列表和字符串比較:
列表和字符串都是序列,元素之間有先後順序關系
字符串是不可變的序列,列表是可變的序列
字符串中每個元素只能是字符,而列表可以存儲任意類型的元素
列表和字符串都是可叠代對象

字符串文本解析方法split() 和join()
S.split(sep=None) 將字符串,使用sep作為分隔符分割S字符串,返回分割後的字符串列表,當不給定參數時,用空白字符作為分隔符分割
S.join(iterable) 用可叠代對象中的字符串,返回一個中間用S進行分隔的字符串
註:
S代表字符串
示例:
s = "A,BB,CCC,DDDD"
L = s.split(‘,‘) # L = [‘A‘,‘BB‘,‘CCC‘,‘DDDD‘]

獲取用戶輸入的英文單詞個數:

s = input("請輸入:") # "welcome to beijing"

L = s.split() # 不加參數將以空白字符作為分隔符
print(len(L)) # 3

path = ["C:", "Programe Files", "Python3"]
‘\‘.join(path) # "C:\Programe Files\Python3"

練習:

  1. 有字符串"hello" ,用此字符串生成"h e l l o" 和 ‘h-e-l-l-o‘
    s = "hello"
    ‘ ‘.join(s)

  2. 有一些數存在列表中.如:
    L = [1, 3, 2, 1, 6, 4, 2, ....., 98, 82]
    要求將列表中只出現一次的數字存入到另一個列表L2中
    (十分鐘)
    (出現多次的不要了!)

    for x in L: # 取出列表中的所有元素
    if L.count(x) == 1:
    將其放入列表L2中
    ...
    ...
    列表推導式 list comprehension
    作用:
    用可叠代對象和表達式組合生成列表
    語法:
    [表達式 for 變量 in 可叠代對象]

    [表達式 for 變量 in 可叠代對象 if 真值表達式]

思考:
輸入一個整數用n綁定,生成一個從 1到 n的平方的列表
輸入: 9
生成 [1, 4, 9, 16, 52, 62, ..... 81]

用列表和for語句組合

n = int(input("輸入: "))
L = []
for x in range(1, n + 1):
L.append(x ** 2)
print(L)

練習:
用列表推導式生成如下列表:
L = [1,4,7,10, .... 100]
print(L)

練習:
輸入一個開始的整數用begin綁定
輸入一個結束的整數用end綁定
將從begin開始,到end結束(不包含end)的所有偶數存於列表中
(建議用列表推導完成)

列表推導式的嵌套:
語法:
[表達式1 for 變量1 in 可叠代對象1 if 真值表達式1
for 變量2 in 可叠代對象2 if 真值表達式2]
示例:
有兩個列表:
L1 = [2,3,5]
L2 = [7,11,13]
生成一個新列表L3 ,L3為L1中的元素和L2中的元素分別相乘合到
L= [27, 211, 213, 37, 311, ... 513]

L = [x * y
for x in L1
for y in L2]
print(L)

練習:
用列表推導式嵌套生成如下列表:
用字符串 "ABC" 和"123"生成如下列表:
["A1", "A2", "A3", "B1", "B2", "B3", "C1", "C2", "C3"]

元組 tuple
定義:
元組是不可改變的序列,同list一樣,元組可以存放任意類型的元素
元組的表示方法:
用小括號() 括起來,單個元素括起來時後加逗號(,)區分單個對象還是元組

創建空元組的字面值
t = () # 空元組
創建非空元組的字面值:
t = 200,
t = (200,)
t = (1,2,3)
t = 100, 200, 300

type(x) 函數用來返回x的類型

元組的構造(創建)函數 tuple
tuple() 生成一個空的元組,等同於()
tuple(iterable) 用可叠代對象生成一個元組
示例:
t = tuple() # 等同於 t = ()
t = tuple(range(5)) # t = (0,1,2,3,4)
t = tuple("ABCD")
t = tuple([5,6,7,8])

元組的運算:
算術運算:

  • += =
    規則同列表和字符串相同
    比較運算:
    < <= > >= == !=
    規則同列表和字符串相同
    in / not in 運算
    判斷一個元素是否在元組內存在, 如果存在返回True,否則返回False

    索引 index
    用法等同於列表的索引
    元組不能索引賦值

    切片 slice
    用法等同於列表的切片
    元組的切片返回一個新的元組
    元組不能切片賦值

元組的方法:
T代表元組:
T.index(v[,begin[,end]]) 返回對應元素的索引下標,begin為開始索引,end為結束索引,當v 不存在時,觸發ValueError錯誤
T.count(x) 返回元組中對應元素的個數

詳見: >>> help(tuple)

五種中的三種序列:
str
list
tuple

序列相關的函數小結:
len(seq) 返回序列的長度
max(x) 返回序列的最大值元素
min(x) 返回序列的最小值元素
sum(x) 返回序列中所有元素的和
any(x) 真值測試,只要有一個為True就為True
all(x) 真值測試,所有元素都為True 才為True
str(obj) 將對象obj序列化為字符串
list(iterable) 用可叠代對象來生成一個列表
tuple(iterable) 用可叠代對象來生成一個元素
reversed(seq) 返回反向順序的叠代器對象
sorted(iterable, reverse=False) 返回已排序的列表

練習:
任意輸入一個字符串:
將此字符串中的空格全部去除, 生成返轉後的字符串:
如:
輸入: abc def g<回車>
輸出: gfedcba
(提示: 可以用reversed 進行反轉)

練習:

  1. 有一些數存在列表中.如:
    L = [1, 3, 2, 1, 6, 4, 2, ....., 98, 82]
    將列表中只的數字存入到另一個列表L2中,
    要求:
    重復出現多次的數字只在L2列表中保留一份
  2. 求100 以內的全部素數,將這素數存放於列表L 中
      最後打印列表 L

  3. 算出100 ~ 1000 以內的水仙花數(Narcissistic Number)
    水仙花數是指百位的3次方加上十位的3次方加個位的3次方等於原數的數字
    例如:
       153 = 13 + 53 + 3**3
    答案:
    153, 370, ...

python3中常用的列表方法(method)