欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

我就是這樣學(xué)習(xí)Python中的列表

 更新時(shí)間:2019年06月02日 15:20:32   作者:lingjiu  
這篇文章主要給大家介紹了關(guān)于我是如何學(xué)習(xí)Python中的列表的,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

1. 列表

對(duì)于python列表的理解可以和C語言里面的數(shù)組進(jìn)行比較性的記憶與對(duì)照,它們比較相似,對(duì)于python里面列表的定義可以直接用方括號(hào)里加所包含對(duì)象的方法,并且python的列表是比較強(qiáng)大的,它包含了很多不同類型的數(shù)據(jù):整型數(shù)字,浮點(diǎn)型,字符串以及對(duì)象等。

不同于 C++ 和 Java,在 Python 中,沒有在標(biāo)準(zhǔn)庫中內(nèi)置數(shù)組類型,而是通常利用列表來表示數(shù)組,同時(shí)它也比數(shù)組的使用要靈活得太多。

列表是 Python 中最基本的數(shù)據(jù)結(jié)構(gòu),列表中的元素的存儲(chǔ)是有序的,所以我們可以直接利用索引去訪問列表中的值。在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)時(shí),我們知道,對(duì)一個(gè)數(shù)據(jù)結(jié)構(gòu)的操作,無外乎增刪改查四種。接下來本文將從這四個(gè)方面來介紹列表的一些常用小技巧。

1.1. 列表中的增

對(duì)列表的增加操作有兩種,一種是創(chuàng)建一個(gè)新的列表,一種是在一個(gè)已有的列表中增加一個(gè)新元素。我們首先介紹如何創(chuàng)建一個(gè)新的列表:

# 創(chuàng)建一個(gè)空列表
list1 = []
# 創(chuàng)建一個(gè)默認(rèn)值為0,長(zhǎng)度為n的列表
list2 = [0] * n
# 利用列表生成式創(chuàng)建列表
list3 = [i for i in range(10)]
# 5*5 二維列表
list4 = [[i for i in range(5)] for j in range(5)]
# 利用其他數(shù)據(jù)結(jié)構(gòu)生成列表, list() 函數(shù)接收一個(gè)可迭代對(duì)象作為參數(shù)
tuple1 = (1, 2, 3)
list5 = list(tuple1)

# 字符串轉(zhuǎn)化為列表
str1 = "I love code"
# 每個(gè)元素作為列表中的一個(gè)元素
list6 = list(str1)
# 按照指定字符分割
list7 = str1.split(" ") # ['I', 'love', 'code']

在編程過程中,有時(shí)我們需要對(duì)一個(gè)列表進(jìn)行操作,但是列表是一個(gè)可變對(duì)象,對(duì)列表的操作往往會(huì)改變其本來的順序結(jié)構(gòu)。因此,當(dāng)我們不想改變列表原有的順序結(jié)構(gòu),我們需要對(duì)舊的列表進(jìn)行一個(gè)拷貝,然后在新的列表上進(jìn)行操作??截惔嬖趦煞N,淺拷貝和深拷貝。可能有人會(huì)對(duì)這兩種拷貝存在疑問,他們得到的列表的形式不是一樣的嘛?

是的,它們?cè)诳截惡蟮玫降牧斜硇问酱_實(shí)是一樣的。但是在進(jìn)行操作時(shí),就會(huì)有很大的差別了,特別是當(dāng)你的列表中存在可變對(duì)象時(shí)。我們只需要記住一點(diǎn),淺拷貝只復(fù)制不可變對(duì)象,而深拷貝不僅復(fù)制不可變對(duì)象,還復(fù)制了可變對(duì)象。以下進(jìn)行舉例說明:

# 如果一個(gè)列表中的元素都是不可變對(duì)象,可以直接用淺拷貝
list1 = [1, 2, 'i']

list2 = list1[::1] # 淺拷貝
list3 = [i for i in list1] # 淺拷貝
import copy
list4 = copy.copy(list1) # 淺拷貝

# 如果一個(gè)列表中的元素包含可變對(duì)象,要完成復(fù)制列表,需要用深拷貝
list5 = ["Will", 1, ["Python", "Java", "C++"]]
list6 = copy.deepcopy(list5)

為什么在包含不可變對(duì)象的時(shí)候,需要用到深拷貝呢?

上面我們說過,淺拷貝只拷貝不可變對(duì)象。當(dāng)列表中存在可變對(duì)象時(shí),我們可以發(fā)現(xiàn)其引用 id 是一樣的,即它們是同一個(gè)對(duì)象,因此對(duì) list5 的操作會(huì)影響到 list6 。而在深拷貝中,對(duì)于可變對(duì)象,在拷貝的新列表中會(huì)生成一個(gè)新的對(duì)象,所以對(duì) list6 的修改不會(huì)影響到 list5 。

id(list5[2]) # 2195936916360
id(list6[2]) # 2195936916744

對(duì)列表的另一種增加操作就是在已有的列表的基礎(chǔ)上增加元素了,主要包括以下幾種操作:

list1 = ["I"]
# 在列表尾部增加一個(gè)新元素
list1.append("love")
# 合并兩個(gè)列表
list2 = ["Apple", 3]
list1.extend(list2) # ["I", "love", "Apple", 3]
list1 = list1 + list2 # ["I", "love", "Apple", 3]
# 在指定位置插入元素
list1.insert(index=1, "not") # ["I", "not", "love", "Apple", 3]

1.2. 列表中的刪

對(duì)數(shù)據(jù)結(jié)構(gòu)的刪除操作包括兩種,刪除整個(gè)列表,或者刪除列表中的某些元素。對(duì)于從內(nèi)存中刪除整個(gè)列表,該操作十分簡(jiǎn)單:

list1 = [1, 2, 3]
del list1

對(duì)于刪除列表中的元素,同樣可以使用 del 語句,同時(shí)還可以使用 remove() 函數(shù)。

list1 = [1, 2, 3]
print(list1) # [1, 2, 3]
del list1[1] 
print(list1) # [1, 3]

# 移除某個(gè)值的第一匹配項(xiàng)
list2 = [1, 2, 2, 3, 5]
list2.remove(2) # 移除第一個(gè)值為 2 的元素

1.3. 列表中的改

修改操作即在原有的列表的基礎(chǔ)上對(duì)其進(jìn)行修改,上面以及介紹了增加和刪除操作,這里就對(duì)不改變?cè)氐膫€(gè)數(shù)的操作進(jìn)行介紹,主要包括排序和反轉(zhuǎn)列表等。

# 對(duì)一個(gè)整數(shù)列表進(jìn)行排序
list1 = [9, 5, 6, 2, 7, 1, 3]
# 升序排列
list1.sort() # [1, 2, 3, 5, 6, 7, 9]
list1 = sorted(list1) # [1, 2, 3, 5, 6, 7, 9]
# 降序排列
list1.sort(reverse=True) # [9, 7, 6, 5, 3, 2, 1]
list1 = sorted(list1, reverse=True) # [9, 7, 6, 5, 3, 2, 1]

# 指定鍵值排序
list1 = [('a', 3), ('b', 2), ('c', 1)]
list1.sort(key=lambda x:x[1]) # [('c', 1), ('b', 2), ('a', 3)]

## 反轉(zhuǎn)列表,即將原來的列表逆序排列
list2 = [4, 2, 3, 1]
list2 = list2[::-1] # [1, 3, 2, 4]
list2.reverse() # [1, 3, 2, 4]

1.4. 列表中的查

對(duì)列表的查找操作無外乎以下幾種:

  • 遍歷列表;
  • 查找指定索引的元素;
  • 查找指定值的元素;

列表的遍歷方式有三種,分別是根據(jù)索引遍歷、根據(jù)值遍歷和 enumerate()遍歷。

list1 = ["Python", "C++", "Java"]

# 方法 1
for i in range(len(list1)):
 print(list1[i])

# 方法 2 , 遍歷速度最高效,但是無法記錄索引
for i in list1:
 print(i)

# 方法 3
for index, val in enumerate(list1):
 print(val)

查找元素有兩種,一種是按照索引查找,一種是遍歷按值查找。

# 查找指定索引的元素
list1 = [1, 3, 2, 5, 7, 8]
list1[3] # 返回索引為 3 的元素,值為5

# 查找指定值的元素
key = 5
for i in list1:
 if i == key:
 print("OK")

# 查找最大元素和最小元素
max(list1) # 8
min(list1) # 1

1.5. 其它小技巧

上述介紹了列表的增刪改查四種常用操作,當(dāng)然對(duì)列表的操作不僅僅只有這些,例如還有兩個(gè)列表的比較,列表結(jié)構(gòu)的轉(zhuǎn)化等等。

比較兩個(gè)列表是否是一樣的,這里的前提條件是這兩個(gè)列表對(duì)象不是同一個(gè)對(duì)象。

list5 = [("car", 1), ("bike", 2), ("foot", 3)]
list6 = [("car", 1), ("bike", 2), ("foot", 3)]
# 判斷兩個(gè)列表是否是同一個(gè)對(duì)象
list5 is list6 # False
# 判斷兩個(gè)列表是否相等
list5 == list6 # True

# 當(dāng)列表中的元素很多,且結(jié)構(gòu)復(fù)雜時(shí),可以使用 numpy 模塊
import numpy as np
a = np.array(list5)
b = np.array(list6)
(a == b).all() # True

列表結(jié)構(gòu)的轉(zhuǎn)化主要包括將列表轉(zhuǎn)化為元組、集合、字符串和字典:

list1 = ["a", "b", "c", "d", "c"]
# 列表轉(zhuǎn)化為元組
tuple1 = tuple(list1) # ('a', 'b', 'c', 'd', 'c')

# 列表轉(zhuǎn)化為集合
set1 = set(list1) # {'a', 'b', 'c', 'd'}

# 列表轉(zhuǎn)化為字符串
str1 = "".join(list1) # 'abcdc'

# 列表轉(zhuǎn)化為字典,元素為 key, 次數(shù)為 value
from collections import Counter, defaultdict
dict1 = Counter(list1) # Counter({'a': 1, 'b': 1, 'c': 2, 'd': 1})
# 或者
dict2 = defaultdict(int)
for i in list1:
 dict2[i] += 1
dict2 # defaultdict(int, {'a': 1, 'b': 1, 'c': 2, 'd': 1})

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • OpenCV實(shí)現(xiàn)人臉識(shí)別

    OpenCV實(shí)現(xiàn)人臉識(shí)別

    本文主要介紹了python使用opencv實(shí)現(xiàn)人臉識(shí)別的相關(guān)資料。具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-04-04
  • 在Python中使用cookielib和urllib2配合PyQuery抓取網(wǎng)頁信息

    在Python中使用cookielib和urllib2配合PyQuery抓取網(wǎng)頁信息

    這篇文章主要介紹了在Python中使用cookielib和rllib2配合PyQuery抓取網(wǎng)頁信息的教程,主要是利用PyQuery解析HTML來實(shí)現(xiàn),需要的朋友可以參考下
    2015-04-04
  • Python不支持 i ++ 語法的原因解析

    Python不支持 i ++ 語法的原因解析

    這篇文章主要介紹了Python不支持 i ++ 語法的原因解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Python多線程的使用詳情

    Python多線程的使用詳情

    這篇文章主要介紹了Python多線程的使用詳情,線程之間執(zhí)行是無序的,cpu調(diào)度哪個(gè)線程就執(zhí)行哪個(gè)線程,下文相關(guān)介紹需要的小伙伴可以參考一下
    2022-04-04
  • Python Flask全棧項(xiàng)目實(shí)戰(zhàn)構(gòu)建在線書店流程

    Python Flask全棧項(xiàng)目實(shí)戰(zhàn)構(gòu)建在線書店流程

    這篇文章主要為大家介紹了Python Flask全流程全棧項(xiàng)目實(shí)戰(zhàn)之在線書店構(gòu)建實(shí)現(xiàn)過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • 詳解PyTorch預(yù)定義數(shù)據(jù)集類datasets.ImageFolder使用方法

    詳解PyTorch預(yù)定義數(shù)據(jù)集類datasets.ImageFolder使用方法

    這篇文章主要為大家介紹了PyTorch預(yù)定義數(shù)據(jù)集類datasets.ImageFolder使用方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Python利用Faiss庫實(shí)現(xiàn)ANN近鄰搜索的方法詳解

    Python利用Faiss庫實(shí)現(xiàn)ANN近鄰搜索的方法詳解

    這篇文章主要介紹了Python利用Faiss庫實(shí)現(xiàn)ANN近鄰搜索的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • HTTPX入門使用教程

    HTTPX入門使用教程

    HTTPX是一款Python棧HTTP客戶端庫,它提供了比標(biāo)準(zhǔn)庫更高級(jí)別、更先進(jìn)的功能,如連接重用、連接池、超時(shí)控制、自動(dòng)繁衍請(qǐng)求,下面通過本文介紹HTTPX入門知識(shí)和基本用法,感興趣的朋友一起看看吧
    2023-12-12
  • 詳解Python列表解析式的使用方法

    詳解Python列表解析式的使用方法

    Python?是一種極其多樣化和強(qiáng)大的編程語言!當(dāng)需要解決一個(gè)問題時(shí),它有著不同的方法。本文將將會(huì)展示列表解析式的使用方法,需要的可以參考一下
    2022-04-04
  • pandas使用apply多列生成一列數(shù)據(jù)的實(shí)例

    pandas使用apply多列生成一列數(shù)據(jù)的實(shí)例

    今天小編就為大家分享一篇pandas使用apply多列生成一列數(shù)據(jù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11

最新評(píng)論