VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > 简明python教程 >
  • Python之List列表如何处理最好?正确案例详解

本文主要在于一些非常态的列表处理,至于 Python list 自带的一些函数或方法,请见下方 Python 列表常用方法.

相关的方法会持续续加进来,也希望读者有一些方式不知道怎么用的,或者有其他的方法,敬请提示.

 

  1. 对列表各元素,逐一处理
>>> import math
>>> a = [math.sqrt(i) for i in range(10)]
[0.0, 1.0, 1.4142135623730951, 1.7320508075688772, 2.0, 2.23606797749979, 2.449489742783178, 2.6457513110645907, 2.8284271247461903, 3.0]
>>> b = [list(range(1,5)), list(range(5,9)), list(range(9,13))]
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
  • 建立列表直接处理
>>> # 一维方式
>>> [int(i*10)/10 for i in a]
[0.0, 1.0, 1.4, 1.7, 2.0, 2.2, 2.4, 2.6, 2.8, 3.0]
>>> # 二维方式
>>> [[b[j][i]**2 for i in range(len(b[j]))] for j in range(len(b))]
[[1, 4, 9, 16], [25, 36, 49, 64], [81, 100, 121, 144]]
  • 使用函数,可以重复使用,也适合处理更复杂的状况
>>> def def func(sequence):
...     return [int(i*10)/10 for i in sequence]
>>> print(func(a))
[0.0, 1.0, 1.4, 1.7, 2.0, 2.2, 2.4, 2.6, 2.8, 3.0]
  • 使用 map + 函数,可以简化函数的处理,更可适用在单一变量或列表
>>> def func(i):
...     return int(i*10)/10
>>> list(map(func, a))
[0.0, 1.0, 1.4, 1.7, 2.0, 2.2, 2.4, 2.6, 2.8, 3.0]
>>> func(1.41459)
1.4
  • 使用 map + lambda 方法,可使 map 对应多参数的函数
>>> list(map(lambda i:int(i*10)/10, a))
[0.0, 1.0, 1.4, 1.7, 2.0, 2.2, 2.4, 2.6, 2.8, 3.0]
  • 使用 map+lambda+function
>>> def Map(func, sequence, *argc):
...     return list(map(lambda i:func(i, *argc), sequence))
>>> Map(round, a, 2)
[0.0, 1.0, 1.41, 1.73, 2.0, 2.24, 2.45, 2.65, 2.83, 3.0]
>>> Map(int, a)
[0, 1, 1, 1, 2, 2, 2, 2, 2, 3]
  1. 条件选择 / 删除元素
  • 使用 if 条件,建立新列表
>>> # 一维方式
>>> [i for i in a if 2<i<3]
[2.23606797749979, 2.449489742783178, 2.6457513110645907, 2.8284271247461903]
  • 使用 filter + function
>>> def func(i):
...     return 2<i<3
>>> list(filter(func, a))
[2.23606797749979, 2.449489742783178, 2.6457513110645907, 2.8284271247461903]
  • 使用 filter + lambda
>>> list(filter(lambda i: 2<i<3, a))
[2.23606797749979, 2.449489742783178, 2.6457513110645907, 2.8284271247461903]
  • 使用 filter + lambda + function
>>> def Filter(func, sequence, *argc):
...     return list(filter(lambda i:func(i, *argc), sequence))
>>> Filter(float.__gt__, a, 2) # 大于2的
>>> b = ['This', 'There', 'Where', 'Here']
>>> Filter(str.__contains__, b, 'T') # 字串中有'T'的
['This', 'There']
>>> Filter(str.__contains__, b, 'r') # 字串中有'r'的
['There', 'Where', 'Here']
  1. 展平列表
def Flat_List(sequence):
    result = []
    if isinstance(sequence, list):
        for item in sequence:
            if isinstance(item, list):
                result += Flat_List(item)
            else:
                result.append(item)
        return result
    else:
        return sequence
Flat_List([[1,2,[3,4,5],6,[7,8,[9,10],[11,12]]]])
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
  1. 列表转换
  • 列表与字典
>>> a = [[1,2],[3,4]]
>>> b = dict(a)
>>> b
{1: 2, 3: 4}
>>> list(map(list, b.items()))
[[1, 2], [3, 4]]
  1. 列表的排列组合
>>> a = [1,2,3]
>>> [[i, j] for i in a for j in a]
[[1, 1], [1, 2], [1, 3], [2, 1], [2, 2], [2, 3], [3, 1], [3, 2], [3, 3]]
>>> [[i, j] for i in a for j in a if i!=j]
[[1, 2], [1, 3], [2, 1], [2, 3], [3, 1], [3, 2]]
>>> from itertools import permutations, combinations, product
>>> list(map(list, permutations(a
      



  

相关教程