Python基础-数据结构

2020-04-09  本文已影响0人  luckybabying
# 列表
a = ['a', 'b', 'c', 'd']
b = ['zx', 'bo']
a = ['a', 'b', 'c', 'd']
type(b)
a.append("w")  # 在列表的末尾添加一个元素。相当于a[len(a):] = [x]

a.extend(b)  # 用于在列表末尾一次性追加另一个序列的多个值
a.remove("t")
a.insert(0, "A")
a.pop(1)
a.clear()
b.index("bo")
a.index("d", 0, 5)  # 返回列表中第一值为d的元素的从零开始索引,如果没有符合抛出异常
a.extend(a)
a.count("a")  # 返回元素a在列表中出现的次数
a.sort()
a.sort(reverse=False)
a.reverse()
a.copy()

'''
列表方法使得列表作为堆栈:
最后一个插入,最先取出(“后进先出”)
要添加第一个要求到堆栈的顶端,使用append()
要从堆栈顶部取出一个元素,使用pop(),不用指定索引
'''
a.append("w")
a.pop()

'''
列表作为队列使用
先添加的元素最先取出“先进先出”,但是列表这个功能是相当低效的。
在列表的开头插入或弹出元素却很慢,因为所有的其他元素都必须移动一位。
若要实现一个队列,可以使用collections.deque ,它被设计成可以快速从
两端添加或弹出元素。
'''

from collections import deque

queue = deque(["Eric", "Johm", "Michael"])
queue.append("Terry")
queue.append("Graham")
queue.popleft()
'''
列表推导式:
这个方式提供了更简单的创建列表的方法
方法:把某种操作应用于序列或可迭代的每个元素上,
然后使用期结果来创建列表,或者通过满足某些特定条件元素来创建子序列

'''

squares1 = []
squares2 = []
squares3 = []

for x in range(10):
    squares1.append(x ** 2)

squares2 = list(map(lambda x: x ** 2, range(10)))

squares3 = [x ** 2 for x in range(10)]
'''
列表推导式的结构是由一对方括号所包含的以下内容:
一个表达式,后面跟一个for子句,然后是零个或者多个for 或者if子句。
返回的结果是一个新列表。由表达式后面的for和if子句的内容进行求值计算而得出。举例子来说

'''
listComprehension = [(x, y) for x in [1, 2, 3] for y in [2, 1, 4]
                     if x != y]

freahfruit = ['      banana', 'loganberry', 'passion fruit']
freahfruit1 = [weapen.strip() for weapen in freahfruit]

# the tuple must be parenthesized ,otherwise an error is raised
abc = [(x, x ** 2) for x in range(6)]

# flatten a list using a listcomp with two 'for'
vec = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
[num for elem in vec for num in elem]

# 推导式可以使用复杂的表达式和嵌套函数
from math import pi

[str(round(pi, i)) for i in range(1, 6)]

'''
嵌套的列表推导式
列表推导式中的初始表达式可以是任何表达式,包括另一个列表推导式
3*4列的矩阵,将其交换行和列
'''

matrix = [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12],
]

# 列表推导式
[[row[i] for row in matrix] for i in range(4)]

# 等价于下面这个列子
transposed = []
for i in range(4):
    transposed.append([row[i] for row in matrix])

# 也等价于下面这个列子

transposed1 = []
for i in range(4):
    # the following 3 lines implement the nested listcomp
    transposed_row = []
    for row in matrix:
        transposed_row.append(row[i])
    transposed1.append(transposed_row)

# 在实际应用中,你应该更喜欢使用内置函数去组成复杂的流程语句。
# zip()函数将会很好的处理这种情况
list(zip(*matrix))

'''
del 语句
del按照索引移除列表一个元素,不同于会返回一个值的pop()方法、
del语句可以用来从列表中移除切片或者整个列表
del也可以删除整个变量
'''
dellist = [-2, -4, 1, 4, 77]
del dellist[0]
del dellist[2:3]
del dellist[:]
del dellist

'''
元组和序列
1.一个元组有几个被逗号隔开的值组成。
2.有一对圆括号
3.元组是immutalble,列表是mutable
4.元组其序列可以是不同种类的。列表的序列是同种类。
5.元组访问方式:解包或者索引。列表访问方式:迭代访问。
6.特殊情况:元组构造0个或者1个的时候比较特殊,看实力

'''
# 值12345, 345, "hello"被打包进元组
t = 12345, 345, "hello"
# 序列解包过。序列解包要求等号左侧的变量数和右侧序列的里所包含的元素数相同。

x, y, z = t
t[2]

u = t, (1, 23, 55)
t[6565]

empty = ()
singleton = "hello",

'''
集合:
由不重复元素组成的无序的集
用于:
1.成员检测和消除重复的元素
2.联合,交集,差集对称差分等数学运算
创建方法:
{}
set()
要是创建空集合,只能用set(),后者创建一个空字典
集合也支持列表推导式
'''
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(type(basket))
print(basket)

'orange1' in basket  # fast mebership testing

# Demonstarte set operation on unique letters from two words
a = set('abcdefabc')
b = set('adffg')
print(a - b)
print(a | b)
print(a & b)
print(a ^ b)

# 集合也支持列表推导式
a = {x for x in "abcdefg" if x not in 'abc'}

'''
字典:
1.字典的构成:关键字,关键字可以是任意不可变类型。通常是str或者数字
2.可以用del删除
3.检测字典是否存在特定建,可以使用in关键字


'''

tel = {'jack': 4098, 'sape': 4139}
tel['guido'] = 3000
tel['jack']
list(tel)
sorted(tel)
'guido' in tel

'jack' not in tel

# dict()构造函数可以直接从键值对序列里创建字典
d = dict([('sape', 293), ('guido', 283), ('jack', 263)])

{x: x ** 2 for x in (2, 4, 6)}

# 关键字字符串简单是,可以通过关键字参数来指定更方便
d2 = dict(sape=33, guido=3, jave=334)

'''
循环的技巧

'''
# 当字典循环中,用items()方法可将关键字和对应的值都取出
knights = {'galahad': 'the pure', 'robin': 'the brave'}
for k, v in knights.items():
    print(k, v)

# 当在序列中循环时,用enumerate()函数科技奖索引位置和其对应的值同时取出
for i, v in enumerate(['tic', 'tac', 'toe']):
    print(i, v)

# 当同时在两个或者更多的序列中时,可以用zip()函数将其内的元素一一匹配
questions = ['name', 'quest', 'favorite color']
answers = ['ancelot', 'the holy grail', 'blue']
for q, a in zip(questions, answers):
    print('what is your {0}? It is {1}.'.format(q, a))

# 逆向循环一个序列,可以先正向定位,然后调用reversed()函数
for i in reversed(range(1, 10, 2)):
    print(i)

# 使用sorted()函数排序,不改变原序列的基础上返回一个新的排好序的序列。
basket = ['apple', 'orange', 'banana', 'apple']
for f in sorted(set(basket)):
    print(f)

# 循环修改列表内容,一般来说改为创建一个新列表比较安全
import math

raw_data = [56.2, float('NaN'), 88.3, 33.34, float('NaN'), 334.5]
filter_data = []
for value in raw_data:
    if not math.isnan(value):
        filter_data.append(value)

string1, string2, string3 = '', 'Trondheim', 'Hammer Dance'

上一篇 下一篇

猜你喜欢

热点阅读