Python編程筆記 - 列表

這篇文章開始介紹Python中的容器。Python容器包括列表、元組、集合與字典。這些數據結構中都涉及到不少的方法,這裏對比較經常使用的一些方法進行介紹,不用每一個方法都記住,熟悉經常使用的便可。python

首先,咱們先來看列表。數組

1、列表的建立方式

# -*- coding: utf-8 -*-
# __author : Demon
# date : 1/16/18 8:19 PM


# 列表的建立
empty_list_01 = []  # 建立一個空的列表
empty_list_02 = list()  # 建立一個空的列表

num_list = [1, 2, 3, 4, 5]  # 建立一個數字列表

str_list = ['a', 'b', 'c']  # 建立一個字符串列表

mix_list = [1, 'a', 'abc']  # 一個列表中可包含元素類型不是固定的

nest_list = [num_list, str_list, mix_list]  # 列表能夠嵌套


print(num_list)  # [1, 2, 3, 4, 5]
print(str_list)  # ['a', 'b', 'c']

# 由打印結果能夠看出列表的存儲是有順序的
# 即怎麼存的就怎麼取
print(num_list[0])  # 列表接受下標訪問,相似於JAVA中的數組  1
print(num_list[1])  # 列表接受下標訪問,相似於JAVA中的數組  2
print(num_list[2])  # 列表接受下標訪問,相似於JAVA中的數組  3
print(num_list[3])  # 列表接受下標訪問,相似於JAVA中的數組  4
print(num_list[4])  # 列表接受下標訪問,相似於JAVA中的數組  5

# 一旦超出長度,就會拋出異常
# print(num_list[5])  # IndexError: list index out of range

2、列表中的經常使用操做

# -*- coding: utf-8 -*-
# __author : Demon
# date : 1/16/18 8:19 PM

# 1. 列表的循環方式【重要】
num_list = [1, 2, 3, 4, 5]  # 建立一個數字列表
for num in num_list:
    print(num, end="")  # 123456
print()

# 2. 求長度
num_list = [1, 2, 3, 4, 5]  # 建立一個數字列表
print(len(num_list))  # 5

# 3. 判斷列表是否爲空【重要】
empty_list = list()
num_list = [1, 2, 3]
# 利用非0即True的原則【推薦方法】
if not empty_list:  # 若是列表爲空
    print("The list is empty")
else:
    print("The list is not empty")
# 利用長度
if not len(num_list):
    print("The list is empty")
else:
    print("The list is not empty")

# 4. 判斷元素是否存在【重要】
num_list = [1, 2, 3]
if 2 in num_list:
    print("in")
else:
    print("not in")

# 5. append(ele) 尾端添加元素
empty_list = []  # 建立一個空的列表
for s in "Hello":
    empty_list.append(s)
print(empty_list)  # ['H', 'e', 'l', 'l', 'o']
# 上述代碼也是將字符串轉換爲列表的一種方式,只是代碼比較複雜

# 6. 列表切片的用法,如字符串切片的用法相似【重要】
# 用法 list[start:end:step]
# start可省略,默認值爲0
# end可省略,默認爲最大長度
# step可省略,默認爲1
# 範圍是[start, end),即左閉右開
str_list = ['a', 'b', 'c']  # 建立一個字符串列表

# 獲取整個list, ['a', 'b', 'c']
print(str_list[::])
print(str_list[0:])
print(str_list[:3])
print(str_list[:200])  # 長度超出時,不會報錯

# 獲取部分
print(str_list[0:2])  # ['a', 'b']
print(str_list[0:2:2])  # ['a']

# 7.sort排序【重要】
# 注意這個方法沒有返回值,是在原列表上進行修改
str_list = ["adfas", "dsdfw", "nklo"]
str_list.sort()
print(str_list)  # ['adfas', 'dsdfw', 'nklo']

# 8.insert(pos, ele) 在指定位置插入元素
str_list = ['a', 'b', 'c']  # 建立一個字符串列表
str_list.insert(2, "we")  # ['a', 'b', 'we', 'c']
print(str_list)
# 若是位置超出長度,不會報錯,會在尾部插入
str_list.insert(20, "we")  # [['a', 'b', 'we', 'c', 'we']
print(str_list)

# 9.del(pos) 刪除指定位置的元素
# 須要注意這個方法不是經過列表.調用的
# 能夠相似理解爲,它不是列表這個類中的方法
str_list = ['a', 'b', 'c']  # 建立一個字符串列表
del str_list[0]
print(str_list)  # ['b', 'c']
# del str_list[20]  # IndexError: list assignment index out of range

# 10.extend(list)或+=合併
num_list = [1, 2]
str_list = ["a", "b"]
print(str_list + num_list)  # ['a', 'b', 1, 2]

# 11.remove(ele) 刪除指定值
str_list = ['a', 'b', 'c']  # 建立一個字符串列表
str_list.remove("a")
print(str_list)  # ['b', 'c']
# str_list.remove("d") # ValueError: list.remove(x): x not in list

# 12.pop(pos) 刪除指定位置的元素
str_list = ['a', 'b', 'c']  # 建立一個字符串列表
# str_val = str_list.pop(100)  # IndexError: pop index out of range
str_val = str_list.pop(0)
print(str_val)  # a
print(str_list)  # ['b', 'c']

# 13.reverse() 反轉,見練習
# 14.count(ele)方法查看某個元素出現的次數
str_list = ['abc', 'b', 'c', "abc"]
print(str_list.count("abc"))  # 2

3、列表的轉換

其餘形式轉列表,採用list(otherType)的方法。能夠轉列表的類型有:字符串,元組等,以下代碼所示:微信

str_01 = "abc"
print(list(str_01))  # ['a', 'b', 'c']

tuple_01 = (1, 2, 3)
print(list(tuple_01))  # [1, 2, 3]

列表轉其餘形式,一般看其餘形式是怎麼支持轉換。其中比較靈活的是列表轉字符串,採用join的方法,以下代碼所示:數據結構

str_list = ["a", "b", "c"]
print(",".join(str_list))  # a,b,c
print("".join(str_list))  # abc

列表轉字符串須要注意:app

  1. join方法不是列表自帶的方法,從調用來看,它是字符串裏的方法
  2. join方法,若是列表中的元素不是字符串,會報錯,以下代碼所示:
num_list = [1, 2, 3] 
# print("".join(num_list))  # TypeError: sequence item 0: expected str instance, int found

4、常見的練習題

常見的有關列表的練習題:函數

  1. 列表的反轉
num_list = [1, 2, 3]
#方式一:調用列表的reverse()方法
num_list.reverse()
print(num_list)  # [3, 2, 1]
# 方式二:使用切片
num_list = [1, 2, 3]
for num in num_list[::-1]:
    print(num)
#若是須要[3, 2, 1]這樣的格式
num_list = [1, 2, 3]
print("[", end="")
for num in num_list[:0:-1]:
    print(num, end=", ")
if not num_list:  # 若是列表爲空
    print("]")
else:
    print("%d]" % num_list[0])

2.如何將列表拷貝到別一個列表中spa

nest_list = [1, 2, 3, ['a', 'b', 'c']]
new_nest_list = nest_list  # 直接賦值拷貝
print(new_nest_list)  # [1, 2, 3, ['a', 'b', 'c']]
new_nest_list.append("4")
print(new_nest_list)  # [1, 2, 3, ['a', 'b', 'c'], '4']
print(nest_list)  # [1, 2, 3, ['a', 'b', 'c'], '4']
# 直接賦值的拷貝會影響原來的列表,是一種淺拷貝

nest_list = [1, 2, 3, ['a', 'b', 'c']]
new_nest_list = nest_list[::]  # 切片
print(new_nest_list)  # [1, 2, 3, ['a', 'b', 'c']]
new_nest_list.append("4")
print(new_nest_list)  # [1, 2, 3, ['a', 'b', 'c'], '4']
print(nest_list)  # [1, 2, 3, ['a', 'b', 'c']]

nest_list[-1].append("d")
print(new_nest_list)  # [1, 2, 3, ['a', 'b', 'c', 'd'], '4']
print(nest_list)  # [1, 2, 3, ['a', 'b', 'c', 'd']]
# 使用切片,改變最外層對原列表沒有影響,而內層是有影響的。這也是一種淺拷貝

nest_list = [1, 2, 3, ['a', 'b', 'c']]
new_nest_list = nest_list.copy()  # 使用copy方法
print(new_nest_list)  # [1, 2, 3, ['a', 'b', 'c']]
new_nest_list.append("4")
print(new_nest_list)  # [1, 2, 3, ['a', 'b', 'c'], '4']
print(nest_list)  # [1, 2, 3, ['a', 'b', 'c']]

nest_list[-1].append("d")
print(new_nest_list)  # [1, 2, 3, ['a', 'b', 'c', 'd'], '4']
print(nest_list)  # [1, 2, 3, ['a', 'b', 'c', 'd']]
# 使用copy,改變最外層對原列表沒有影響,而內層是有影響的。這也是一種淺拷貝
# 若是想要實現深拷貝,須要使用copy模塊中的deepcopy方法,詳見<python中的深拷貝與淺拷貝>一文

3.列表的排序code

列表的簡單排序一般使用list.sort()方法。 可是這個sort方法使用會相對比較靈活。它的完整定義以下:
sort(*, key=None, reverse=False)
key指定一個函數名,而且這個函數只能接受一個參數
reverse指定排序的方式排序

x = ['bc', 'essmm', 'mdsfm', 'ss' ]
x.sort(key=str.lower)
print(x)  # ['bc', 'essmm', 'mdsfm', 'ss']

y = [3, 2, 8, 0, 1]
y.sort(reverse=True)
print(y)  # [8, 3, 2, 1, 0]

能夠發現,使用list.sort()方法進行排序,是調用的列表中自帶的方法,而且它是做用於原列表,並無返回值。若是咱們想要獲得一個新的排好序的列表,則須要使用到sorted()方法。這個方法十分靈活,後面將再分專題進行介紹。utf-8

微信搜索公衆號: 帕森與加瓦 可關注後續文章

相關文章
相關標籤/搜索