日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python中的 List

發布時間:2024/7/5 python 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python中的 List 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于List:

      • 最最最基本操作
      • 其他操作上的問題
        • 一、如何判斷 list 重復
        • 二、根據 list 里面的每一個 list 的第一個元素排序
        • 三、 一個 list 給另一個 list 賦值
        • 四、list 與 nparray
        • 五、二維列表按列取元素
      • 報錯匯總
        • IndexError:list assignment Index out of range
        • ValueError: invalid literal for int() with base 10: "6960"
        • TypeError: unhashable type: 'list'
      • List的效率問題(處理大數據時尤為重要)

最最最基本操作

# 創建 L = [] L = ['a', 'b', 'c'] L = ['apple', 123, True] L = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] L = list(range(5)) # 取長度 len(L) # 插入 L.insert(2, 'd') # 在指定位置插入元素 L.append('pear') # 在尾部追加元素 # 刪除 L.pop() # 刪除尾部元素 L.pop(1) # 刪除指定位置元素 L.remove('a') # 刪除指定元素 # 元素替換 L[0] = 'banana' # 求元素出現次數 L.count('apple') # 取元素索引 L.index('apple') # 元素排序 L.sort() L.sort(reverse = True) # List切片操作(正數--索引,負數--位) a = [1,2,3,4,5,6] print(a[2:4]) # [3, 4] 左閉右開區間 從索引2到索引4 print(a[-4:-2]) # [3, 4] 左閉右開區間 從倒數第4位到倒數第3位 print(a[:4]) # [1, 2, 3, 4] 默認從索引0開始開始 print(a[4:]) # [5, 6] 默認到最大索引結束 print(a[::1]) # [1, 2, 3, 4, 5, 6] 從索引0開始每1位輸出一次 print(a[::2]) # [1, 3, 5] 從索引0開始每2位輸出一次 print(a[::-1]) # [6, 5, 4, 3, 2, 1] 從最后一位開始,倒序每1位輸出一次 print(a[::-2]) # [6, 4, 2] 從最后一位開始,倒序每2位輸出一次

其他操作上的問題

一、如何判斷 list 重復

l1 = [1,2,3] l2 = [3,2,1] print(l1 == l2) # False:l1 和 l2 逐個元素進行比較,相同位置元素全都相同認為 list 相同 print(set(l1) == set(l2)) # True:l1 和 l2 含有的元素相同即認為 list 相同

二、根據 list 里面的每一個 list 的第一個元素排序

arr_new = [ [2,3,4] , [3,4,5], [1,2,3] ] sort_arr = [value for index, value in sorted(enumerate(arr_new), key=lambda arr_new: arr_new[1])]# sort_arr = [ [1,2,3] , # [2,3,4], # [3,4,5] ]

三、 一個 list 給另一個 list 賦值

方式一: 直接用 = 賦值,實際是把對象 a 的地址給了 b(即 a 和 b 指向內存中相同的位置),所以對 a 做修改,b 也表現為被修改了。

a = [1, 2, 3]b = a # b = [1, 2, 3]a[0] = 0 # b = [0, 2, 3]

方式二:使用切片賦值,實際上為 b 重新開辟了一塊內存區域,用 a 的每一個元素的值來給 b 賦值,由于a 、b 在內存中的指向不同,所以修改 a 對 b 并沒有影響

b = a[:] a[0] = 0 b = [1, 2, 3]

四、list 與 nparray

術語:

  • list 是列表,列表的元素是列表可以稱為多層列表,list最多只有一個維度,是python內置對象。
  • nparray 是數組,真正的數組,可以有多個維度,是numpy的數據類型。

1、關于list 轉 nparray
真是一部血淚史!!!!(在此感謝高中同學GL的幫助)

list1 = [[1, 2, 3], [4, 5, 6]] nparr1 = np.array(list1) # 結果 nparr1 變成了二維數組,很棒對不對!!! [[1 2 3][4 5 6]]# 但是我當時就轉不過來,才發現是list的問題 list2 = [[1, 2, 3], [4, 5]] nparr2 = np.array(list2) # 結果 nparr2 是這樣子的: [list([1, 2, 3]) list([4, 5])]

數據處理的時候忽略了一種情況,導致這個 bug,其實這個bug又會引起別的地方的 bug,使用 debug 的方式一步步向上找,才找到問題得根源,debug 大法好!
也說明了在寫程序的時候,寫一段就 test 一段會比較好,一不小心留下的小問題,到最后需要很大力氣回來找原因。

2、nparray 轉 list

b = np.array([[1, 2, 3], [4, 5, 6]]) a = b.tolist() # 結果 b: [[1 2 3][4 5 6]] # 結果 a: [[1, 2, 3], [4, 5, 6]]

3、展開

# 1、二維數組轉化為一維數組 b = np.array([[1, 2, 3], [4, 5, 6]]) b = b.reshape((1, -1)) # 結果: [[1 2 3 4 5 6]]# 2、多層 list 展平為一層 a = [[1, 2, 3], [4, 5, 6]] a_flat = [item for sublist in a for item in sublist] # 結果 [1 2 3 4 5 6] # 更多展開方法見:https://www.cnblogs.com/wushaogui/p/9241931.html

五、二維列表按列取元素

直接切片是不行的:

a=[[1,2,3], [4,5,6]] print(a[:, 0]) # 嘗試用數組的方法讀取一列失敗

我們可以直接構造:

b = [i[0] for i in a] # 從a中的每一行取第一個元素。 print(b) # [1, 4]

報錯匯總

IndexError:list assignment Index out of range

情況一:數組索引越界
情況二:數組未初始化
報錯代碼如下:

temp = [] for line in friend_arr:if (line[0] in u_dict) and (line[1] in u_dict):temp[0] = u_dict.get(line[0])temp[1] = u_dict.get(line[1])friend_arr_new.append(temp)

改為 temp = [0, 0] 注意后面是根據索引賦值,而不是根據append添加值,所以初始化時不能為空。
其實可以不用臨時變量,改為:

for line in friend_arr:if (line[0] in u_dict) and (line[1] in u_dict):friend_arr_new.append([u_dict.get(line[0]), u_dict.get(line[1])])

ValueError: invalid literal for int() with base 10: “6960”

錯誤含義:應該放一個 int 類型的數據,我放了一個無效的字符 “6960”
去看一下報錯那行的變量是下面這樣的,把string放了進去,找到賦值的地方,去掉了str(),

[23,56,78,'70,'70','70']

網上也有人說可以這樣操作,不過我這里是不需要:

import re # 用了int(string)語句的地方改為下面的表達,即去掉所有非數字的字符。 int(re.sub("\D","",string))

TypeError: unhashable type: ‘list’

1、原因:set的元素必須是可以hash的元素(hashable items)

  • int、float、str、tuple:是可以哈希的
  • list、set、dict:是不可哈希的
s = {1, 2} # 使用元素直接創建set集合(此時元素為int類型) print(s) s1 = set([1, 2]) # 使用list中的元素創建set集合(此時list中的元素為int類型) print(s1)

結果:
{1, 2}
{1, 2}

s2 = {[1, 2], [1, 2], [1, 2, 3]} # 使用元素直接創建set集合(此時元素為list類型) print(s2)s3 = set([[1, 2], [1, 2], [1, 2, 3]]) # 使用list中的元素創建set集合(此時list中的元素為list類型) print(s3)

結果:
TypeError: unhashable type: ‘list’
TypeError: unhashable type: ‘list’

2、一般使用 set 里面放 list 的目的是想獲得不重復的 list 的集合

# 換個思路:list中元素都排序后就可以識別重復 list_temp.sort() if list_temp not in list_total:list_total.append(list_temp)

List的效率問題(處理大數據時尤為重要)

1、檢查元素
與字典、集合相比,檢查列表中元素是否存在某個值是非常緩慢的,這是因為Python在列表中進行了線性逐個掃描,而在字典和集合中Python是同時檢查所有元素的(基于哈希表)
2、連接列表
x = [‘a’, ‘b’, ‘c’]
y = [‘apple’, 123, True]

方式一:x+y
方式二:x.extend(y)

方式一是一種相對高代價的操作,因為連接過程中創建了新列表,并且需要復制對象。
方式二是一種效率更高的操作,尤其是在構建大型列表的時候。

總結

以上是生活随笔為你收集整理的Python中的 List的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。