python 数据结构

# -*-coding:utf-8-*-

# -----------------
# Data Structures
# -----------------
import numpy as np

'''
    Lists
'''

'''
    list.append(x):添加元素x
    list.extend(L):添加list列表L
    list.insert(i,x):在i位置插入元素x
    list.remove(x):移除元素x
    list.pop():移除最后一个元素
    list.index(x):查看元素x的位置索引
    list.count(x):元素x的个数
    list.sort(cmp=None, key=None, reverse=False): 排序操作
    list.reverse():逆序
'''
a = [3, 435, 545, 3243, 23, 34]
print a.count(23)
a.sort()  # 默认为从小到大
print a
a.sort(reverse=True)  # 此时为从大到小
print a
a.append(67)  # 添加一个元素67
print a
b = [563, 43, 4]
a.extend(b)  # 添加另一个list列表
print a
a.reverse()
print a
a.pop()
print a
print '----------------------------'

'''
    将list作为stack来操作,'last-in,first-out'
'''
stack = [3, 4, 5]
stack.append(3)
stack.append(9)
print stack
stack.pop()
print stack
print '-----------------------------'

'''
    将list作为Queue来操作,'first-in,first-out'
'''
from collections import deque  # collections.deque 用于快速的从队列两端进行添加和删除操作

queue = deque(['eric', 'john', 'micheal'])
queue.append('terry')
queue.append('graham')  # 右边进
print queue
queue.popleft()  # 移除最左边的元素,左边出,右边进
print queue
queue.popleft()
print queue
print '------------------------------'

'''
    函数工具:filter(),map(),reduce()
'''
print '*****filter****'


def f(x):
    return x % 3 == 0 or x % 5 == 0


a = filter(f, range(2, 25))  # filter(function, sequence): 获取符合函数条件的序列
print a
print

print '*****map*****'


def g(x):
    return x * x * x


b = map(g, range(1, 11))  # map(function, sequence):获取序列元素在函数下的取值
print b

seq = range(8)


def add(x, y):  # add()有两个参数
    return x + y


c = map(add, seq, seq)
print c
print

print '*****reduce*****'


def add(x, y):
    return x + y


d = reduce(add, range(1, 11))  # reduce(function, sequence):将函数应用到整个序列
print d
print '---------------------'
'''
    列表推导式
'''
squares = []
for x in range(10):
    squares.append(x ** 2)
print squares
square = [x ** 2 for x in range(10)]  # 使用列表推导式更加简单,更加清晰的展示循环的结果
print square
print '---------------------'
s = [(x, y) for x in [1, 2, 3] for y in [3, 1, 4] if x != y]
print s
c = []
for x in [1, 2, 3]:
    for y in [3, 1, 4]:
        if x != y:
            c.append((x, y))
print c
print '---------------------'
vec = [-4, -2, 0, 2, 4]
v = [x * 2 for x in vec]
print v
e = [x for x in vec if x >= 0]
print e
c = [abs(x) for x in vec]
print c
d = [(x, x ** 2) for x in range(6)]
print d
vec = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
num = [num for elem in vec for num in elem]
print num

from math import pi

p = [str(round(pi, i)) for i in range(1, 6)]
print p
print '---------------------'
print
'''
    嵌套列表推导式
'''
matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
m = [[row[i] for row in matrix] for i in range(4)]
print m

transposed = []
for i in range(4):
    transposed.append([row[i] for row in matrix])
print transposed

transposed = []
for i in range(4):
    transposed_row = []
    for row in matrix:
        transposed_row.append(row[i])
    transposed.append(transposed_row)
print transposed

z = zip(*matrix)  # zip()的用法
print z
'''
    del 用法
'''
print '---------del---------'
a = [-1, 1, 66, 78, 34, 212, 3]
del a[2]  # 删除元素
print a
del a[2:4]
print a
del a[:]
print a
'''
    元组和序列
        注意:元组是不可变的,列表是可变的
'''
t = 12345, 54234, 'hello'
print t[0]
print t
u = t, (1, 2, 3)  # 元组是可以嵌套的,元组不能修改
print u

empty = []
singleton = 'hello'
print len(empty)  # 空元组的长度为0
print len(singleton)

'''
    集合Sets:集合中可以进行的操作包括:并集、交集、对称差等数学操作
    集合的创建必须使用set()
'''
basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
fruit = set(basket)
print fruit
print 'apple' in fruit  # 判断元素是否在集合中,返回True or False
a = set('abcdefg')
b = set('dfhe')
print a
print b
print a - b  # 集合差集
print a | b  # 集合交集
print a & b  # 集合并集
print a ^ b  # 集合异或

'''
    字典:
'''
tel = {'jack': 4098, 'sape': 4139}
tel['guide'] = 4127
print tel
del tel['sape']
print tel
tel['irv'] = 56326
key = tel.keys()
print key

d = dict([('sape', 4139), ('jack', 4098), ('guide', 4127)])
print d

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

c = dict(sape=4139, jack=4098, guide=4127)
print c

print '------------------------'

'''
    循环技巧
'''
for i, v in enumerate(['tic', 'tac', 'toe']):  # 使用enumerate()方法
    print i, v

questions = ['name', 'quest', 'favorite color']
answer = ['lan', 'the', 'blue']
for q, a in zip(questions, answer):  # 使用zip()方法
    print q, a

for i in reversed(xrange(1, 10, 2)):  # 使用reversed()和xrange()方法
    print i

basket = ['apple', 'orange', 'pear', 'banana']  # 使用sorted()方法
for f in sorted(set(basket)):
    print f

knights = {'gallahad': 'the pure', 'robin': 'the brave'}
for k, v in knights.iteritems():
    print k, v

import math
raw_data = [56.2, float('NaN'), 51.7, 55.3, 52.5, float('NaN')]
filtered_data = []
for value in raw_data:
    if not math.isnan(value):
        filtered_data.append(value)
print filtered_data

'''
    其他条件:
        while, if
        in, not in, is, is not, A and not B or C,A and B and C
'''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值