In [ ]:
a = [0]
a1 = a * 10
print(str(id(a))+":%s" %(a))
print(str(id(a1)) + ":%s" %(a1))

a2 = a1*10
print(a1)
print(a2)


a3 = [[0 for x in range(10)] for x in range(10)]
print(a3)

In [ ]:
# 函数运行装饰器
def decorate_func_time(func):
    from datetime import datetime as dt 
    def inner(*args, **kwargs):
        start = dt.now()
        ret = func(*args, **kwargs)
        delta = dt.now() - start 
        print(func.__name__ + ' elapsed time:' + str(delta.microseconds))
        return ret 
    return inner 

@decorate_func_time
def func1(num):
    a = [[0] * num] * num
    print(type(a))
#     print(a)

@decorate_func_time
def func2(num):
    a = [[0 for x in range(num)] for x in range(num)]
    print(type(a))
#     print(a)
    
import numpy as np
@decorate_func_time
def func3(num):
    a = np.zeros((num,num))
    print(type(a))




func1(100)
func2(100)
func3(100)

In [ ]:
import numpy as np
a = np.arange(10,19).reshape((3,3))
print(a)
print(a[0,:])
print(a[0,:])
print(a[:,0])
print(a[0:,0])
# print(a[:,0])

In [ ]:
# pandas
import pandas as pd
from numpy import log

s = pd.Series([12, -4, 7, 9])
s

S = pd.Series([12, -4, 7, 9], index=['a','b','c','d'])
S

S[['b','c']]

arr = np.array([1,2,3,4])
s3 = pd.Series(arr)
s3

s4 = pd.Series(S)
s4

s4[1] = 100
S

s/2

# np.log(s)

serd = pd.Series([1,0,2,1,2,3], index=['white', 'white', 'blue', 'green', 'green', 'yellow'])
serd
serd.unique() # 去重

# print((serd.isin([0,3])))

serd[serd.isin([0,3])]

s2 = pd.Series([5,-3,np.NaN, 14])
s2.isnull()
# s2.notnull()
# s2[s2.isnull()]
# s2[s2.notnull()]

dict_my = {'red':2000,'blue':1000,'yellow':500,'orange':1000}
myseries = pd.Series(dict_my)
myseries

colors = ['red', 'yellow', 'orange', 'blue', 'green']
myseries = pd.Series(dict_my, index=colors)
myseries

mydict2 = {'red':400,'yellow':1000,'black':700}
myseries2 = pd.Series(mydict2)
myseries + myseries2

In [ ]:
# DataFrame对象
data = {
    'color':['blue','green','yellow','red','white'],
    'object':['ball', 'pen', 'pencil', 'paper', 'mug'],
    'price':[1.2, 1.0, 0.6, 0.9, 1.7]}
frame = pd.DataFrame(data)
fram2 = frame
frame
print(frame)
print("\n")
print(frame.iloc[[2,4]])
print("\n")
print(frame[0:3])
print('\n')
frame2['price'][0] = 100
print(frame2)
print("\n")
print(frame)
print("\n")
frame.index.name = 'id'
frame.columns.name = 'item'
print(frame)
print("\n")
frame['new'] =  [3.0, 1.3, 2.2, 0.8, 1.1]
print(frame)

# 只选择感兴趣的数据,columns选择指定需要的列
frame2 = pd.DataFrame(data, columns=['object', 'price'])
frame2

# 指定数组标签
frame2 = pd.DataFrame(data, index=['one','two','three','four','five'], columns=['object', 'price'])
frame2

frame2.columns
frame2.index

print("\n")

ser = pd.Series(np.arange(5))
frame['new'] = ser
print(frame)

In [ ]:
mat = [[1, 2, 3], [4, 5, 6]]
ret = (zip(*mat))

a = "hello world!"
ret = a[::-1]
print(ret)
print(a[:2:-1])

a = [1,2,3]
x,y,z = a
x

l = ["i", "want", "this", "one"]
ret = " ".join(l)
print(ret)

a = 7
b = 5
a,b = b, a
print(a)
print(b)

In [ ]:
# 
import numpy as np
import pandas as pd

data = np.genfromtxt('monthly_csv.csv', delimiter=',', names=True)
data

In [147]:
####################################################################
#
# 命名元组
# Namedtuples
# 解决的两个问题:namedtuples和常规元组一样,它的内容是不可改变的
# 命名元组也是命名的元组,可以通过唯一的标识符来访问存储在其中的对象

# 有更好的结构化数据,增强代码的可读性
#
# 注意事项:
# collection.namedtuple,是一个自定义的不可修改的类的快捷方式,但是更节约内存
# 命名元组通过更容易让人理解的方式结构化数据,使代码更干净整洁
# 命名元组提供了一些十分有用的以下划线开头的帮助函数
#
####################################################################



# 普通元组
tup = ('hello', object(), 42)
tup
tup[2]
# tup[2] = 23 报错:'tuple' object does not support item assignment

# 命名元组
from collections import namedtuple
Car = namedtuple('Car', 'color mileage') 
# 默认命名元组的工厂函数会在字段字符串后默认调用split()函数
# 对字段进行拆解,等同于
# 'color mileage'.split() ==> ['color', 'mileage']
# Car = namedtuple('Car', ['color', 'mileage'])
Car = namedtuple('Car',[
    'color',
    'mileage'
])
my_car = Car('red', 3812.4)
my_car.color

color, mileage = my_car # 元组的解包以及带有*函数参数的解包也可以正常工作
print(color, mileage)

print(*my_car) # 命名元组中元组的即可以通过ID来访问

my_car[0] # 通过其索引来访问
tuple(my_car)

my_car # 命名元组的输出甚至可以是一个标尊的字符串表达式

# 在Python内部,命名元组是通过一个常规的类对象实现的。
# 但是在内存使用效率上比常规类要高,和正常元组一样。
# 可以看作一个自定义的不可修改的类的快捷方式,更节约内存

# 由于命名元组是在常规类的基础上构建的
# 所以可以添加方法到命名元组的类中
Car = namedtuple('Car', 'color mileage')
class MyCarWithMethods(Car):
    def hexcolor(self):
        if self.color == 'red':
            return '#ff0000'
        else:
            return '#000000'
        
c = MyCarWithMethods('red', 1234)
c.hexcolor()

# 使用基本元组的._field属性,新增一个不可改变的字段
Car = namedtuple('Car', 'color mileage')
# 新增charge属性
ElectricCar = namedtuple('ElectricCar', Car._fields + ('charge',))
ElectricCar('red', 1234, 45.0)
ElectricCar(color='red', mileage=1234, charge=45.0)
my_elec_car = ElectricCar('blue', 111, 5000)
my_elec_car.charge

# 内置帮助函数
my_car._asdict() # 返回命名元组中存储的元素
import json
json.dumps(my_car._asdict()) # 输出json样式

my_car._replace(color='yellow') # _replace函数,进行字段的选择性替换

Car._make(['red', 999]) # _make函数,可以用来在序列或者迭代中创建一个新的命名元组实例


red 3812.4
red 3812.4
Out[147]:
Car(color='red', mileage=999)

In [ ]: