Chap2 python内置的数据结构(pt1)
2.1 列表的使用
在 Python 程序中,列表也被称为序列,是 Python 语言中最基本的一种数据结构,和其他 编程语言(C/C++/Java)中的数组类似。
2.1.1 列表的基本用法
1. 创建数字列表
#!/usr/bin/env python3
numbers = list(range(1,4))
2. 访问列表中的值
在 Python 程序中,因为列表是一个有序集合,所以要想访问列表中的 任何元素,只需要将该元素的位置或索引告诉 Python 即可。
car = ['audi', 'bmw', 'benchi', 'lingzhi']
print(car[0])#通过下标访问元素
list2 = [1, 2, 3, 4, 5, 6, 7 ]
print ("list2[1:5]: ", list2[1:5])#输出列表中第2到第5个元素
3. 删除列表中的重复元素并保持顺序不变
如果序列中保存的元素是可散列的(hashable),那么上述功能可以使用集合和生成器实现。 例如,下面的代码演示了在可散列情况下的实现过程。
def dedupe(items): seen = set()
for item in items:
if item not in seen:
yield item
seen.add(item)
if __name__ == '__main__':
a = [5, 5, 2, 1, 9, 1, 5, 10]
print(a) print(list(dedupe(a)))
上述代码只有当序列中的元素是可散列的元素才能这么做,如果想在不可散列的对象序列中去除重复项,需要以下代码来实现
def buha(items, key=None):
seen = set()
for item in items:
val = item if key is None else key(item)#key是个lambda函数 ,把{'x': 2, 'y': 3}传入key()返回值为(2,3)
if val not in seen:
yield item
seen.add(val)
if __name__ == '__main__':
a=[
{'x': 2, 'y': 3},
{'x': 1, 'y': 4},
{'x': 2, 'y': 3},
{'x': 2, 'y': 3},
{'x': 10, 'y': 15}
]
print(a)
print(list(buha(a, key=lambda a: (a['x'],a['y']))))
note: lambda表达式简介
lambda表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。
lambda所表示的匿名函数的内容应该是很简单的,如果复杂的话,干脆就重新定义一个函数了,使用lambda就有点过于执拗了。
lambda就是用来定义一个匿名函数的,如果还要给他绑定一个名字的话,就会显得有点画蛇添足,通常是直接使用lambda函数。
add = lambda x, y : x+y
add(1,2) # 结果为3
3. 使用列表推导式
列表推导式提供了一种创建列表的简洁方法。使用列表推导式能够非常简洁 地构造一个新列表,只需要用一个简洁的表达式即可对得到的元素进行转换变形。
示例:
创建一个包含从1到10的平方的列表
squares1 = [x**2 for x in range(10)]
另外,在Python程序中,有时候筛选标准无法简单地表示在列表推导式或生 成器表达式中,例如当筛选过程涉及异常处理或者其他一些复杂的细节时。 此时可以考虑将处理筛选功能的代码放到单独的功能函数中,然后使用内 建的 filter()函数进行处理。
values = ['1', '2', '-3', '-', '4', 'N/A', '5'] def is_int(val):
try:
x = int(val)
return True
except ValueError:
return False
ivals = list(filter(is_int, values))
print(ivals)