靈活操作Python列表

2021-08-01 06:34:48 字數 2881 閱讀 2653

python非常簡潔和優雅,今天看看python中操作列表的一些靈活方法。

map

map是乙個python類(舊版本中是乙個方法),但是我們利用map的建構函式,可以生成乙個可迭代的map物件,該物件類似於列表。map的建構函式接受兩個引數,第乙個引數是乙個函式,當函式足夠簡單時,可以是乙個lambda表示式,該函式用來處理第二個引數,第二個引數要求是可迭代的,而列表就是可迭代的。所以,我們可以使用map方法,對列表進行操作,生成乙個新的迭代物件。說著挺抽象,看看例子:

>>> def twice(num):

return num * 2

>>> a = [1,2,3]

>>> result = map(twice, a)

>>> print(list(result))

[2, 4, 6]

首先定義乙個twice函式,用來為乙個數乘2,然後定義乙個列表a,呼叫map生成乙個可迭代物件,然後通過list轉化為列表後,列印輸出。輸出結果正是我們預期的。由於twice這個方法很簡單,我們可以用lambda函式進行簡化

>>> result = map(lambda x : x * 2, a)

>>> print(list(result))

[2, 4, 6]

列表推導

如果你認為這就滿足了,那就大錯特錯了,python還有更加簡單的方法完成上面的任務,那就是列表推導,看下面的例子

>>> [x * 2 for x in a]

[2, 4, 6]

就是這麼簡單,我們遍歷a列表的元素,將其賦值給x,然後用x * 2的值填充乙個新的列表。如果覺得不夠爽快,再來看看

>>> [x * 2 for x in a if x % 2 != 0]

[2, 6]

取出a中的奇數,然後對其進行乘2運算,生成乙個列表。再看乙個複雜點的

>>> [x + y for x in a if x % 2 != 0 for y in a if y % 2 == 0]

[3, 5, 5, 7, 7, 9]

>>> [x for x in a if x % 2 != 0]

[1, 3, 5]

>>> [y for y in a if y % 2 == 0]

[2, 4]

第乙個for生成3個元素的列表,第二個for生成2個元素的列表,而上面的結果是排列組合2 * 3 個元素的列表,這樣大家差不多就明白了,上面複雜的結果,是排列組合後,將x和y資料對求和生成了列表。

由於字串可以理解為字元的列表,也能操作字串

>>> a="aeiou"

>>> [str.upper(x) for x in a]

['a', 'e', 'i', 'o', 'u']

range

range類很簡單,和map類似,利用建構函式生成乙個range物件,該物件可迭代,引數可以指定終止數字,起始和終止數字,起始和終止數字外加步長三種形式,直接看例子

>>> list(range(10))

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> list(range(3,10))

[3, 4, 5, 6, 7, 8, 9]

>>> list(range(3,10,2))

[3, 5, 7, 9]

enumerate

先看乙個range的例子

>>> a = [1,2,3,4,5]

>>> for i in range(len(a)):

print('index %d: %d' % (i, a[i]))

index 0: 1

index 1: 2

index 2: 3

index 3: 4

index 4: 5

但使用enumrate,則:

>>> for i, num in enumerate(a):

print('index %d: %d' % (i, num))

index 0: 1

index 1: 2

index 2: 3

index 3: 4

index 4: 5

更加簡潔。

zip

zip可以操作兩個列表,如下所示

>>> for num1, num2 in zip(a, b):

print(num1 + num2, end=" ")

5 7 9

以上就是一些python常用的操作列表的方法,這裡再說明一下,如果我們的列表很大,例如:

>>>a=list(range(10000))

你可以試著列印一下a,估計介面會卡住xd,10000個數實在太大了,占用記憶體實在不小。如果使用上面的方法操作這個列表會很耗費資源,比如列表推導,會生成乙個等大的列表,這個時候怎麼辦呢?我們可以使用生成器表示式,python處理生成器不是一下子產生所有資料,而是用到乙個生成乙個,不過生成器只能夠迭代一輪。看看例子

>>> a=list(range(10000))

>>> it = (x * 2 for x in a)

>>> it

at 0x00000215bc711ba0>

>>> print(next(it))

0>>> print(next(it))2

每次呼叫next,從迭代器生成乙個數字,而不是一口氣生成10000個數字,而且生成器表示式也很簡單,就是將前面列表推導的換成()。

python列表建立操作 python列表操作

建立列表 sample list a 1,a b python 列表操作 sample list a b 0,1,3 得到列表中的某乙個值 value start sample list 0 end value sample list 1 刪除列表的第乙個值 del sample list 0 在列...

python列表建立操作 python列表操作

列表是最常用的python資料型別,它可以作為乙個方括號內的逗號分隔值出現。列表的資料項不需要具有相同的型別。如 list a b 2,5,1 1 新建列表 stus 建立空列表 stus1 list 建立空列表 print stus print stus1 stus 范冰冰 維達 soon 上述 ...

python 列表操作

list 一種順序儲存結構,序列的一種,列表元素可以是任何型別,類似陣列,引用型別。格式定義 olist 1,str 定義乙個空的list olist 獲取列表元素個數 len olist 刪除乙個列表 del olist 刪除乙個列表元素 del list i 支援 olist1 olist2 列...