python list 列表

python2数据类型是有int和long区别的 type(2**32) int type(2**64) long
python3里面是没有long的概念的,长整型

大概理解
小数就是浮点数
科学计数法也是浮点数 E代表秘
52.3E4 52.3 x 10**4


布尔值
真和假
1和10

数据运算
and
or
not

in
not in

身份运算
is
is not

计算机中能表示的最小单位是一个二进制位
计算机中能存储的最小单位是一个二进制位
bit

8bit= 1byte(字节)
1024byte=1kbyte
1024kbyte=1mbyte
1024mbyte=1gbyte

and or ^
128 64 32 16 8 4 2 1
0 0 1 1 1 1 0 0 = 60
0 0 0 0 1 1 0 1 = 13
and (都为真)
----------------------------------------
0 0 0 0 1 1 0 0 = 12
or(任意为真)
------------------------------------------
0 0 1 1 1 1 0 1 = 61
^(同时为真,同时为假 均非)
0 0 1 1 0 0 0 1 = 49

~(按位取反)
128 64 32 16 8 4 2 1
0 0 1 1 1 1 0 0 = 60
1 1 0 0 0 0 1 1 = 195 (-61)
结果是195-256 = -61 (按位取反结果就是这么算的)

三元运算
>>> a,b,c=1,3,5
>>> d=a if a>b else c
>>> d
5
如果a>b d=a 否则 d=c

字符串转换 二进制
encode str-->bytes
encode(编码)

>>> '€20'.encode('utf-8')
b'\xe2\x82\xac20'
>>> b'\xe2\x82\xac20'.decode('utf-8')
'€20'

20欧元,编码,指定字符集,变成二进制
string - > byte
二进制,解码,指定字符集,变成bytes
byte - >string

列表
范围值 左闭又开 (顾头不顾尾)
names = ["father","mother","xixi","hanhan"]
print(names)
print(names[0],names[3])
print(names[1:3]) # 左闭又开,取最左边的数,到最右边的数,不取最后边的数)
#也叫 切片


增删改查

#!/usr/bin/env python
#-*- coding:utf-8 -*-
# Author:summer_han
names = ["father","mother","xixi","hanhan"]
print(names)
print(names[0],names[3])
print(names[1:3])
print(names[3])
print(names[-1]) #取最后一个值
print(names[-2:]) #取最后二个值
print(names[0:]) #取所有值
print(names[1:]) #取第一个值向后所有值
print(names[:2]) #取钱两个值

names.append("yeye") #加到最后
print(names[0:])

names.insert(4,"nainai")
print(names[0:])

names.insert(3,"nainai") #第三个位置插入
print(names)

names[3]="didi" #修改
print(names)

#删除的方法
names.remove("didi") #删除弟弟
print(names)

del names[-1] #删除最后一个
print(names)

names.pop() #默认删除最后一个,如果输入位置则删除相应位置
names.pop(1)
print(names)


#大列表,删除某个人名字
print(names.index("father")) #打印位置
print(names[names.index("father")]) #既打印位置又打印名字,当有多个人物重名方便辨认

#统计某个人名有多少个
names.append("didi")
names.insert(1,"gege")
names.insert(2,"father")
#names.clear() #清空列表
names.reverse() #列表反转
print(names)

print(names.count("father"))
names.sort() #列表排序 特殊符号在最前,然后数字,然后大写,然后小写,按照ascii顺序排序的

names2=[1,2,3,4]
names.extend(names2) #把names2表合并过阿里,names2还存在

print(names,names2)

del names2 #删除变量names2
print(names,names2)


浅 copy:::
names=['didi', 'father', 'father', ['sister','brother'],'gege', 'hanhan', 'mother', 'xixi']

names2=names.copy()
print(names)
print(names2)

names[2]="爸爸"
names[3][0]="姐姐" #浅copy 在copy第二层的时候,copy的只是一个内存地址,不是实际数据
#所以当第二层数据改变的时候,内存地址的指向变了,copy的数据也就跟着变了
#同理 改names2的第二层 ,names的也会跟着改变

print(names)
print(names2)

names2[3][1]="哥哥"
print(names)
print(names2)


#如果想硬拷贝,数据不会跟着变,需要导入copy模块
import copy
names=['didi', 'father', 'father', ['sister','brother'],'gege', 'hanhan', 'mother', 'xixi']

names2=copy.copy(names) #依然是浅copy
names2=copy.deepcopy(names) #深copy 完全独立的数据,不会再随着改变而改变
names[2]="爸爸"
names[3][0]="姐姐"

print(names)
print(names2)

names2[3][1]="哥哥"
print(names)
print(names2)
#
一般都用浅copy,因为深copy当列表过大时会占用两份内存空间


#循环和切片步长
names=['didi', 'father', 'father', ['sister','brother'],'gege', 'hanhan', 'mother', 'xixi']
print(names[0:-1:2]) #从头到尾,步长为2,显示姓名
print(names[:-1:2]) #同上
for i in names:
print(i)


浅copy三种实现方式:
people=['name',[1,2,3,'b']]
1、
import copy
p1=copy.copy(people)

2、
p2=people[:]

3、工厂函数
p3=list(person) ???p3=list(people[1:2])

浅copy什么情况下非常有用:
夫妻共有存款案例
import copy
person=['name',['deposit',200]]
p1=person[:]
p2=person[:]
print(p1)
print(p2)

p1[0]="sujunfeng"
p2[0]="xiezhili"
print(p1)
print(p2)

p1[1][1]=50
print(p1)
print(p2)

posted @ 2017-12-02 15:48  boundshunter  阅读(104)  评论(0编辑  收藏  举报