python 常用技巧 — 列表(list)

目录:

1. 嵌套列表对应位置元素相加 (add the corresponding elements of nested list)

2. 多个列表对应位置相加(add the corresponding elements of several lists) 

3. 列表中嵌套元组对应位置相加 (python sum corresponding position in list neseted tuple)

4. 判断列表中所有元素是否都是0 (python check if all element in list is zero)

5. 寻找列表中所有最大值的位置 (python find all position of maximum value in list) 

6. 计算列表中出现次数最多的所有项 (python get all value with the highest occurrence in list)

7. 生成等间隔列表 (python create list in same space)

8. 寻找嵌套列表的最大值 (python find max value in nested list)

9. 找到列表中的众数 (python find mode in list)

10. 列表按照某个规则排序 (python sort a list according to an regulation)

11. 列表里面元素所有是否满足某一个条件 (python check if all element of a list matches a condition)

12. 对两个列表一起进行排序 (python sort two list in same order)

13.  把嵌套的列表平铺成一个列表 (python convert nested list to a flat list)

 

内容:

1. 嵌套列表对应位置元素相加 (add the corresponding elements of nested list)

https://stackoverflow.com/questions/11280536/how-can-i-add-the-corresponding-elements-of-several-lists-of-numbers

方法1:

>>> lis=[[1,2,3,4,5],[2,3,4,5,6],[3,4,5,6,7]]
>>> [sum(x) for x in zip(*lis)]
[6, 9, 12, 15, 18] 

 方法2:

>>> seq = np.array([
... [1,2,3,4,5],
... [2,3,4,5,6],
... [3,4,5,6,7]])
>>> np.sum(seq,axis=0)
array([ 6,  9, 12, 15, 18])

 

 2. 多个列表对应位置相加(add the corresponding elements of several lists)  

https://stackoverflow.com/questions/11280536/how-can-i-add-the-corresponding-elements-of-several-lists-of-numbers

方法1: 

a = [1,2,3,4,5]
b = [2,3,4,5,6]
c = [3,4,5,6,7]
[sum(n) for n in zip(*[a, b, c])]

 方法2:

>>> seq = np.array([
... [1,2,3,4,5],
... [2,3,4,5,6],
... [3,4,5,6,7]])
>>> np.sum(seq,axis=0)
array([ 6,  9, 12, 15, 18])

 

3. 列表中嵌套元组对应位置相加 (python sum corresponding position in list neseted tuple)

https://stackoverflow.com/questions/14180866/sum-each-value-in-a-list-of-tuples

方法1:

l = [(1, 2), (3, 4), (5, 6), (7, 8), (9, 0)]
[sum(x) for x in zip(*l)]
[25, 20]

方法2:

map(sum, zip(*l))
[25, 20]

 

 4. 判断列表中所有元素是否都是0 (python check if all element in list is zero)

https://stackoverflow.com/questions/10666163/how-to-check-if-all-elements-of-a-list-matches-a-condition

In [62]: b=[0, 0, 0, 0, 0, 0, 0, 0, 0]
In [63]: all(i==0 for i in b)
Out[63]: True

 

 5. 寻找列表中所有最大值的位置 (python find all position of maximum value in list)

https://stackoverflow.com/questions/3989016/how-to-find-all-positions-of-the-maximum-value-in-a-list

方法1:

a = [32, 37, 28, 30, 37, 25, 27, 24, 35, 55, 23, 31, 55, 21, 40, 18, 50, 35, 41, 49, 37, 19, 40, 41, 31]
>>> m = max(a)
>>> [i for i, j in enumerate(a) if j == m]
[9, 12]

 方法2:

m = max(a)
[i for i in range(len(a)) if a[i] == m]

 

6. 计算列表中出现次数最多的所有项 (python get all value with the highest occurrence in list) 

https://stackoverflow.com/questions/36516279/how-to-return-elements-with-the-highest-occurrence-in-list

In [10]: from collections import Counter
In [11]: a=[2, 3, 5, 1, 6, 1, 5]
In [12]: ct = Counter(a)
In [13]: ct
Out[13]: Counter({1: 2, 2: 1, 3: 1, 5: 2, 6: 1})
In [14]: max_value = max(ct.values())
In [15]: max_value
Out[15]: 2
In [16]: sorted(key for key, value in ct.items() if value == max_value)
Out[16]: [1, 5]

 

7. 生成等间隔列表 (python create list in same space)

https://stackoverflow.com/questions/6683690/making-a-list-of-evenly-spaced-numbers-in-a-certain-range-in-python

方法1:

In [3]: [3+x*5 for x in range(10)]
Out[3]: [3, 8, 13, 18, 23, 28, 33, 38, 43, 48]

 方法2:

In [46]: import numpy as np
In [47]: np.linspace(0,5,10)
Out[47]: 
array([ 0.        ,  0.55555556,  1.11111111,  1.66666667,  2.22222222,
        2.77777778,  3.33333333,  3.88888889,  4.44444444,  5.        ])

 方法3:

>>> a = np.arange(0,5, 0.5) # returns a numpy array
>>> a
array([ 0. ,  0.5,  1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ,  4.5]

 

8. 寻找嵌套列表的最大值 (python find max value in nested list)

https://stackoverflow.com/questions/33286642/finding-the-largest-number-in-a-nested-list-in-python

In [4]: lists = [[21, 34, 345, 2], [555, 22, 6, 7], [94, 777, 65, 1], [23, 54, 12, 666]]

In [5]: list(map(max, lists))
Out[5]: [345, 555, 777, 666]

In [6]: max(map(max, lists))
Out[6]: 777

 

9. 找到列表中的众数 (python find mode in list)

 https://stackoverflow.com/questions/10797819/finding-the-mode-of-a-list

In [1]: from statistics import mode

In [2]: list = [2,3,4,5,64,3,2,3,3,3]

In [3]: mode(list)
Out[3]: 3

 

10. 列表按照某个规则排序 (python sort a list according to an regulation)

https://www.geeksforgeeks.org/python-sort-list-according-second-element-sublist/

注意:区分sort和sorted,是否是原地修改列表(in place)

In [58]: a=[('rishav', 10), ('akash', 5), ('ram', 20), ('gaurav', 15)]

In [59]: b=sorted(a, key = lambda x: x[1], reverse=True)

In [60]: a
Out[60]: [('rishav', 10), ('akash', 5), ('ram', 20), ('gaurav', 15)]

In [61]: b
Out[61]: [('ram', 20), ('gaurav', 15), ('rishav', 10), ('akash', 5)]

In [62]: a.sort(key = lambda x: x[1], reverse=True)

In [63]: a
Out[63]: [('ram', 20), ('gaurav', 15), ('rishav', 10), ('akash', 5)]

 

11. 列表里面元素所有是否满足某一个条件 (python check if all element of a list matches a condition)

https://stackoverflow.com/questions/10666163/how-to-check-if-all-elements-of-a-list-matches-a-condition

>>> items = [[1, 2, 0], [1, 2, 0], [1, 2, 0]]
>>> all(item[2] == 0 for item in items)
True
>>> items = [[1, 2, 0], [1, 2, 1], [1, 2, 0]]
>>> all(item[2] == 0 for item in items)
False
如果想判断至少存在一个这样的元素,则使用下面语句
>>> any(item[2] == 0 for item in items)
True

 

12. 对两个列表一起进行排序 (python sort two list in same order)

https://stackoverflow.com/questions/9764298/is-it-possible-to-sort-two-listswhich-reference-each-other-in-the-exact-same-w

In [197]: a
Out[197]: [(38, 750, 574, 788), (39, 301, 575, 559), (39, 182, 254, 281)]

In [198]: b
Out[198]: [(291, 778), (306, 429), (151, 230)]

In [199]: c, d =zip(*sorted(zip(a, b)))

In [200]: c
Out[200]: ((38, 750, 574, 788), (39, 182, 254, 281), (39, 301, 575, 559))

In [201]: d
Out[201]: ((291, 778), (151, 230), (306, 429))

 

13.  把嵌套的列表平铺成一个列表 (python convert nested list to a flat list)

https://djangocentral.com/nested-list-to-flat-list/

In [223]: a=[[(86, 68, 414, 99), (309, 132, 435, 144), (94, 185, 410, 230)], [], [], [(1, 2, 3, 4)], []]
// 方法1
In [224]: import functools
     ...: import operator
     ...: 

In [225]: functools.reduce(operator.concat, a)
Out[225]: [(86, 68, 414, 99), (309, 132, 435, 144), (94, 185, 410, 230), (1, 2, 3, 4)]
// 方法2
In [226]: from functools import reduce

In [227]:  reduce(lambda x, y: x+y, a)
Out[227]: [(86, 68, 414, 99), (309, 132, 435, 144), (94, 185, 410, 230), (1, 2, 3, 4)]
// 方法3
In [228]: from itertools import chain

In [229]: list(chain.from_iterable(a))
Out[229]: [(86, 68, 414, 99), (309, 132, 435, 144), (94, 185, 410, 230), (1, 2, 3, 4)]

 

posted @ 2019-11-21 14:12  ttweixiao9999  阅读(595)  评论(0编辑  收藏  举报