本系列文章中, python用的idle是spyder或者pycharm, 两者都很好用, spyder 是在anaconda 中的, 自带了很多包可以用,

pycharm 只是个编译器, 没有很多包, 但是可以从anaconda 中传过来, 具体操作可以见我的另一篇博文.

Python2 与python3 语法略有差别.  本系列文章全部针对 python3 以上版本!

spyder 中的快捷键: ctrl+1 注释 , F5 运行,  上下键调用, #注释,  \表示续行

''' abdfa''' 三引号可以实现换行

一行写多条语句, 需要用分号;

pycharm中的快捷键:  Ctrl + /   行注释/取消行注释,

ctrl+D 复制本行到下一行(nice),  ctrl+y 删除本行 , Shift + F10    运行, Shift + F9   调试  ,ctrl+r 替换  ctrl+f 查找

如果运行的按钮是灰色的, 需要在倒三角的下拉菜单中

地方选择一下

左上角的下拉三角这边 选择 python ,同时在script path中找到文件的路径, 之后就可以了.

 (一) python 基础知识

python的代码极为精简, 没有分号, if,for不用对应写end, 缩进是 代码的灵魂

区分大小写  fish 与Fish不同的

v='28C'  字符串可以单引号也可双引号 , v[-1]='C' ;  v[0:2] 表示0,1, 取不到2

长度为n的序列索引: 0,1,2,3..n-1, 倒过来为-1,-2,...-n

v[0:-1] 获取除去最后一个字符串以外的部分;  v[::-1] 倒序

float(v[0:-1]) 将字符串转化为小数

格式化输出:  print(' the price is: %.2f yuan'%x)  %.2f表示小数点有两位

range(10) 表示 0-9 , 取不到10

简单输入输出:   price=input('please input a number:')

: input()返回的类型是字符型str, 需要用int(), float()得到数值 , 可以用eval()将input当做表达式来处理.

关键字: false, none, true, and as, break...

表达式: **乘方, //整除(得到商), % 取余, ~ , & , | ,  <=, >=, !=,==, not, and, or

增量赋值:  m%=5 表示 m=m%5, a=a+3等价于a+=3  , 还有m**=2, a/=8

链式赋值: m=n=3.14, 先把3.14赋值给n, 再把n 赋值给m,

多重赋值: x=1, y=2,可以输出x,y=(1,2) , x,y=y,x 则马上交换了顺序, 不需要通过第三个变量,   其中逗号, 表示元组

可以多个一起赋值:  x,y=1,2 两个同时赋值

3<4<7 表示 (3<4) and (4<7)

f=open(r'c:\python\test.py','w'); 或者f=open('c:\\python\\test.py','w');

错误 f=open('c:\python\test.py','w');

python 自己的内建函数: abs(), bool(), round()四舍五入, int(), divmod(), pow(), float(), chr(), complex(), dir(), input(), help(),

输入dir(__builtins__) 得到所有内建函数名,  help(zip) 查看zip 函数的使用指导.

(二)六种数据类型

(1) 数值型(int , float , complex复数)

int(4.5)=4,  不可以int('你好')

float(4)=4.0

9.8e3 代表9800.0,  -4.78e-2

complex(4)=4+0j

x=2.1+5.6j,  x.imag 虚部 , x.real  实部, x.conjugate() 获得共轭

str(123)

x//y商  x%y 余数  divmod(x,y)=(x//y,  x%y)

-10//3=-4, 保证余数是正的,   abs(x)

(2) string  字符串, 可以用单引号, 双引号, 三引号

print('\'nihao\'')  #'nihao'
print('\"nihao\"') #"nihao"

\转义符,

其他也可以用转义字符表示

a='\101\t\x41\n'
b='\141\t\x61\n'
print(a,b)
#A A
# a a

字符串的索引: 从0 开始计数

注意, s='abc', 直接在console中输入s 得到 'abc', 但是写print(s) 则为 abc

s="I'm a student"
s
Out[2]: "I'm a student"
type(s)
Out[3]: str
s='abc'
s
Out[5]: 'abc'
s='''hello # 三引号可以让字符串保持原貌
word'''
s
Out[7]: 'hello\nword' s=r'd:\python\test.py' # 原始字符串
s
Out[9]: 'd:\\python\\test.py'

实例

a='hello' #也可以 a=''hello'', a='''hello'''
print(a[2]) #l
print(a[0:2]) # he
print(3*'pine') # pinepinepine
print('like'+'pine') # likepine 通过+ * 实现字符串的连接
print(len('apple')) #

实例

month='janfebmaraprmayjunaugsepoctnovdec'
n=input('please input num(1-12):')
pos=3*(int(n)-1)
month_abbrev=month[pos:pos+3]
print(type(month_abbrev))
print("月份简写为"+month_abbrev+'!')

int的问题

print(int('1.234'))  # 报错 print(eval('1.234'))可以
print(int(1.234)) # 可以

字符串的常用方法

实例

a='thank you'
print(a.capitalize())
print(a.center(20))
print(a.center(20,'\''))
print(a.endswith('s'))
print(a.find('o')) # 返回第一个o位置的下标 7
print(a.rjust(20,'+'))

注意 以上操作都不会改变a !!! 上述运行结果为

Thank you
     thank you     
'''''thank you''''''
False
7  ( 从0 开始计数的)
+++++++++++thank you

a='thank you'
b='o'.join(a) # 在a的每个字符中都插入o
print(b)
print(a) # 不改变a
print(a.split('k')) # k作为分割点进行分开
print(a.strip()) # 移除字符串头尾指定的字符 空则删除空格
print(a.strip('yu'))
print(a.replace('o','ww')) #次序为old, new

结果:

tohoaonoko oyooou
thank you
['than', ' you']
thank you
thank yo
thank ywwu

实例

s='gone with the wind'
print(s.find('the')) # 10 找位置
print(s.find('the',4,13)) #找某个范围内的字符串的位置, 10
s1=['hello','world']
print(' '.join(s1)) # hello world 得到字符串

实例: 'What do you think of the saying "No pains, No gains"?' 中双引号的内容是否为标题格式??

s='What do you think of the saying "No pains, No gains"?'
lindex=s.index('\"',0,len(s))
rindex=s.rindex('\"',0,len(s))
s1=s[lindex+1:rindex]
print(s1) # No pains, No gains
if s1.istitle():
print('it is title format')
else:
print('it is not title format') # 简化上述 split
s='What do you think of the saying "No pains, No gains"?'
s1=s.split('\"')[1] # 用" 隔开并取中间的字符串
print(s1) # No pains, No gains
if s1.istitle():
print('it is title format')
else:
print('it is not title format')

实例 : 将字符串"hello, world!" 中的world 换成python , 并计算其包含的标点符号个数

s1="hello, world!"
s2=s1[:7]+'python!'
print(s2)
cnt=0
for ch in s2[:]:
if ch in ',.?!':
cnt=cnt+1
print('there are %d punctuation marks.'%cnt)
print('there are {0:d} punctuation marks.'.format(cnt))

上述用到了 print输出的格式化的两种方法,  第二种中 {} 内部的参数含义是

{参数的序号:格式说明符}

格式说明符还有以下这些:  d,f 常用, f 还可规定 +m.nf 的形式规定小数点的个数等

整个宽度是m列, 如果实际宽度超出了就突破m 的限制

另外还有 < 表示 左对齐, 默认用空格填充

0>5d 表示右对齐, 用0填充左边, 宽度为5

^ 居中对齐

{{}} 表示输出一个{}

例子

age,height=21,1.783
print("Age:{0:<5d}, Height:{1:5.2f}".format(age,height))
# 上述如果顺序是好的, 那么{}第一个参数可以不写0,1,2
# Age:21 , Height: 1.78

例子

name=['AXP','BA','CAT','CVX']
price=['100.23','128.34','239.15','309.213']
for i in range(4):
print('{:<8d}{:8s}{:8s}'.format(i,name[i],price[i]))
# < 左对齐, 其实字符串默认就是左对齐, 整数默认方式是右对齐, 需要用<实现左对齐 print('I get {:d}{{}}!'.format(32))
# I get 32{}!

0  AXP  100.23
1  BA     128.34
2  CAT   239.15
3  CVX   309.213

(3) 元组 tuple  可以包含多个数据类型,用逗号分开, 小括号括起来的(a,b,c), 记忆->元组就用圆括号!! 

tuple('hel') =('h','e','l')

元组的元素不支持赋值, 元组不可变!!

t=(12,'hha',45)
t1=12,'hha',45 # 可以不加括号
print(t)
print(t1) # (12, 'hha', 45)

元组定义后不可以更改了,使程序更安全,但是不灵活,

t1=(12,)
t2=(12)
print(type(t1)) # <class 'tuple'>
print(type(t2)) # <class 'int'>

注意元组定义的逗号

print(8*(8)) #
print(8*(8,)) # (8, 8, 8, 8, 8, 8, 8, 8)

sorted(tuple) 报错, 元组不可改变

元组用在什么地方?

(1) 在映射类型中当做键使用

(2) 函数的特殊类型参数

(3) 作为函数的特殊返回值

可变长函数参数(吸收参数)  加一个*,

def fun(x,*y):
print(x)
print(y)
fun('hello','pyhton','world')
#hello
#('pyhton', 'world') 多个参数合并成一个元组

多个返回值

def fun():
return 1,2,3
fun()
#Out[56]: (1, 2, 3)

函数的返回对象个数

(4) list  : Python 中的苦力

元组元素不可变, 但是列表可变!  列表也可以存放不同类型的数据, 列表用中括号 ,用逗号分开 ,列表可更改 [a,b,c]

a=[1,2,3]
print(2*a) # [1, 2, 3, 1, 2, 3] 重复 #对列表进行修改
a=[1,2,3]
a.append('e')
print(a) # [1, 2, 3, 'e']
a.insert(2,10) # 位置2 插入10
print(a) # a改变了, [1, 2, 10, 3, 'e']
a.pop(3) #删除3位置的元素
print(a) # [1, 2, 10, 'e']
print(a[::-1]) #反向排列 ['e', 10, 2, 1]
#a[:] 得到全部
#a[2:] 2位置到最后 a1=a.count(1) # a1=1 计算1 出现的次数
a=[1,2,3]
a.append('e')
print(a+a) # 只是连接而已 [1, 2, 3, 'e', 1, 2, 3, 'e']
b=list('ok')
print(a+b) # [1, 2, 3, 'e', 'o', 'k'] a=[1,2,13]
a.append('e')
a.append('b')
a.sort(key=lambda x:len(str(x))) # 根据长度大小进行排序, 不能直接a.sort(key=len) 报错, int没有len!
print(a) # [1, 2, 'e', 'b', 13] a=[1,2,13]
a.append('e')
import random as rd
a.append('')
rd.shuffle(a) # a改变, 打乱顺序
print(a) #[13, 1, 'e', '21', 2]

字符串可以变成列表

a='do you like python'.split()
print(a) # ['do', 'you', 'like', 'python']

实例: 评委打分(去掉高低)+ 观众打分-->平均分,   help(list.sort)

s1=[9,9,8.5,10,9.4,9.4,8.5,9,8.1,9.1]
s2=9
s1.sort() # 从小到大排序
s1.pop() # 去最后一个, 弹出
print(s1)
s1.pop(0)
s1.append(s2)
avg=sum(s1)/len(s1)
print('avg score is %.2f'%avg)

注意:如果上述用sorted(s1), 不会改变s1, 通过赋值可以s3=sorted(s1)

append 与extend对比

week=['monday','tuesday','wednesday','thursday','friday']
weekend=['saturday','sunday']
#week.append(weekend)
#print(week)
# ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', ['saturday', 'sunday']]
week.extend(weekend)
print(week)
#['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'] for i,j in enumerate(week):
print(i+1,j)
#1 monday
#2 tuesday
#3 wednesday
#4 thursday
#5 friday
#6 saturday
#7 sunday

list.sort(key=none, reverse=False)

l=[1,2,11,9,4]
l.sort(reverse=True)
print(l) # [11, 9, 4, 2, 1]
s=['apple','egg','banana']
s.sort(key=len)
print(s) # ['egg', 'apple', 'banana']

列表解析

[x for x in range(5)]
Out[49]: [0, 1, 2, 3, 4] [x**2 for x in range(5)]
Out[50]: [0, 1, 4, 9, 16] [x+2 for x in range(10) if x%3==0]
Out[51]: [2, 5, 8, 11] [(x+1,y+1) for x in range(2) for y in range(3)]
Out[52]: [(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3)]

(5) dict : 字典. 字典可以实现映射, 用花括号 {'a':1, 'b':2}

想要查找某个人的工资

name=['mike','peter','lily']
sal=[100,200,130]
print(sal[name.index('mike')]) # 100

上述方式比较复杂, 字典可以使其更简洁, 字典是一种映射类型: 键(key)--> 值(value) , key-value 对

创建字典的方法

#(1) 直接创建
d1={'mike':100, 'allice':120}
#(2) 用列表创建
info1=[('mike',100),('alice',120)] # 元素是元组
d2=dict(info1)
#(3)
info2=[['mike',100],['alice',120]] # 元素是列表
d3=dict(info2)
#(4)
d4=dict((('mike',100),('alice',120))) # 全部用元组
#(5)
d5=dict(mike=100,alice=120)

因此, 只要元素之间存在对应关系, 无论是tuple ,还是list 都可以创建字典

sorted(d5)
Out[61]: ['alice', 'mike'] , 字典是无序存储的, 这个只是内部存储结果

字典的其他创建方法.

d={} # 创立一个空字典
p=d.fromkeys([1,2,3],'alpha') # 另一种定义字典的方法, key是1,2,3, values一样都是alpha
p={}.fromkeys([1,2,3],'alpha') # 也可以!!
print('p=',p)
p1=p #p1不随p变动
p2=p.copy() #p2不随p变动
del p[2] # 删除2 这个键与值
print ('p=',p)
print ('p1=',p1) #p1与p一起变
print ('p2=',p2) #p2不变

p= {1: 'alpha', 2: 'alpha', 3: 'alpha'}

p= {1: 'alpha', 3: 'alpha'}
p1= {1: 'alpha', 3: 'alpha'}
p2= {1: 'alpha', 2: 'alpha', 3: 'alpha'}

对比:

s={'mike':150, 'alice':180,'bob':200}
s1=s
s={} # 导致s指向{}, 但是s1不变
print(s1) # {'mike': 150, 'alice': 180, 'bob': 200} s={'mike':150, 'alice':180,'bob':200}
s1=s
s.clear() # 真的清空了, 被赋值对象也清空了
print(s1) # {}

总结

注意: 字典是没有顺序的! 字典不是像list 一样通过索引确定对象 , 而是通过键来确定

字典的基本操作

p=dict(a=1,b=2,c=3)
p
Out[66]: {'a': 1, 'b': 2, 'c': 3}
p[a] # 出错
p['a'] # 查找键对应的值
Out[68]: 1
p['d']=4 # 增加新元素
p
Out[70]: {'a': 1, 'b': 2, 'c': 3, 'd': 4}
'f' in p # 判断f 是否在p中
Out[71]: False
del p['a'] # 删除
p
Out[73]: {'b': 2, 'c': 3, 'd': 4}

注意: 通过键查找值, 推荐使用get

s={'mike':150, 'allice':180,'bob':200}
s['lili'] # 报错
print(s.get('lili'))
# 输出 None , 不报错

实例

x=['boy','girl'];y=[30,25]  #两个list
z=dict(zip(x,y)) # 利用两个list 生成字典 zip()返回zip对象
print(z) # {'boy': 30, 'girl': 25}
print(z.keys()) # dict_keys(['boy', 'girl'])
print(z.values()) # dict_values([30, 25])
for m,n in z.items(): # items()返回一个列表, 元素为键值对构成的元组
print(m,n)
for i in z:
print(i) # 默认输出键 , 要是遍历values 则 为 for i in st.values()
print(i+':'+str(z[i])) # 键:value

{'boy': 30, 'girl': 25}
dict_keys(['boy', 'girl'])
dict_values([30, 25])
boy 30
girl 25
boy
boy:30
girl
girl:25

应用: 公司简称与对应的股价提取

s_info=[('AXP','American Express Company','78.61'),('CAT','Caterpillat Inc','98.23')]
a=[]
b=[]
for i in range(2):
s1=s_info[i][0]
s2=s_info[i][2]
a.append(s1)
b.append(s2)
d=dict(zip(a,b))
print(d) # {'AXP': '78.61', 'CAT': '98.23'}

更加简便的方法

s_info=[('AXP','American Express Company','78.61'),('CAT','Caterpillat Inc','98.23')]
d={}
for x in s_info:
d[x[0]]=x[2]
print(d) # {'AXP': '78.61', 'CAT': '98.23'}

实例3. 现在有两张工资dict , 一新一旧, 如何更新?

sal1={'mike':100, 'alice':120}
sal2={'mike':150, 'alice':180,'bob':200}
sal1.update(sal2)
print(sal1) # {'mike': 150, 'alice': 180, 'bob': 200}

(六) set, 集合. set可以实现删除列表中的相同元素, 用大括号

{1,2,3} 无序不重复

print(set([1,2,3,3,4,5,5])) # {1, 2, 3, 4, 5}快速删除重复
print (set('you')) #{'y', 'u', 'o'} 用字符串生成set, 每个元素是字符串的单个字符
a=set([1,2,3])
a.add('you')
a.remove(2)
print (a) # {1, 3, 'you'}
b=set('abcde') # {'a','b','c','d','e'}
c=set('cdefg')
print (b&c) # {'e', 'c', 'd'}
print (b-c) # {'a', 'b'}
print (b^c) #交叉积=b并c-b交c={'a', 'f', 'g', 'b'}
print (b|c) # {'a', 'e', 'g', 'c', 'f', 'b', 'd'}
print (b.issubset(c)) # 子集的判断 False b是否为c的子集?
d=set('degdeg')
print(d<c)# True 判断集合d在c里面

总结

   

除了上述python 符号, 函数也能完成以上任务

  

例如

a=set('sunrise')
b=set('sunset')
a.issubset(b)
Out[89]: False
a.difference(b)
Out[90]: {'i', 'r'}

例如

a=set('sunrise')
a.add('y')
print(a) # {'n', 'u', 'y', 'r', 's', 'i', 'e'}
a.remove('s')
print(a) # {'n', 'u', 'y', 'r', 'i', 'e'}
a.update('sunset')
print(a) # {'n', 'u', 't', 'y', 'r', 's', 'i', 'e'}
a.clear()
print(a) # set()

python(1):数据类型/string/list/dict/set等的更多相关文章

  1. Python基础数据类型-字典(dict)

    Python基础数据类型-字典(dict) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客使用的是Python3.6版本,以及以后分享的每一篇都是Python3.x版本的哟 ...

  2. Python基本数据类型之字典dict

    字典dict 是一个键(key)值(value)对,结构为{},大括号 创建字典 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 info = { # k ...

  3. Python基本数据类型--列表、元组、字典、集合

    一.Python基本数据类型--列表(List) 1.定义:[ ]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素. 2.列表的创建: # 方式一 list1 = ['name','ag ...

  4. python基本数据类型list,tuple,set,dict用法以及遍历方法

    1.list类型 类似于java的list类型,数据集合,可以追加元素与删除元素. 遍历list可以用下标进行遍历,也可以用迭代器遍历list集合 建立list的时候用[]括号 import sys ...

  5. python基础数据类型--dict 字典

    字典 字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据.python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必 ...

  6. Python基础数据类型-字符串(string)

    Python基础数据类型-字符串(string) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客使用的是Python3.6版本,以及以后分享的每一篇都是Python3.x版 ...

  7. python 基本数据类型分析

    在python中,一切都是对象!对象由类创建而来,对象所拥有的功能都来自于类.在本节中,我们了解一下python基本数据类型对象具有哪些功能,我们平常是怎么使用的. 对于python,一切事物都是对象 ...

  8. python常用数据类型内置方法介绍

    熟练掌握python常用数据类型内置方法是每个初学者必须具备的内功. 下面介绍了python常用的集中数据类型及其方法,点开源代码,其中对主要方法都进行了中文注释. 一.整型 a = 100 a.xx ...

  9. python自学笔记(二)python基本数据类型之字符串处理

    一.数据类型的组成分3部分:身份.类型.值 身份:id方法来看它的唯一标识符,内存地址靠这个查看 类型:type方法查看 值:数据项 二.常用基本数据类型 int 整型 boolean 布尔型 str ...

随机推荐

  1. WSGI、uwsgi和uWSGI

    一.WSGI WSGI ( Web Server Gateway Interface )是一个网络服务器和网络应用的通用接口的规范或者用于Python框架. 由于python开发人员在网络框架的选择限 ...

  2. zabbix系列 ~ linux监控相关

    Linux 监控 一 相关名词解释    cpu context switch (上下文切换)   1 定义 CPU给每个任务一定的服务时间,当时间片轮转的时候,需要把当前状态保存下来,同时加载下一个 ...

  3. Elasticsearch 5.4.3实战--插件安装

    elasticsearch 5.0以后的版本对head的插件支持跟以前不同,安装方法如下:  1. 安装node $ wget https://npm.taobao.org/mirrors/node/ ...

  4. 【原理】VRRP详解

    写在前面 keepalived是一个基于VRRP协议来实现的服务高可用方案,从而可以避免IP单点故障.一般与其他负载均衡技术,如LVS,Nginx等一起来工作来达到集群高可用的目的 关于Keepali ...

  5. 关于softmax、argmax、softargmax

    在阅读LIFT:Learned Invariant Feature Transform一文时,文中第1节提到为了保证端到端的可微性,利用softargmax来代替传统的NMS(非极大值抑制)来挑选极值 ...

  6. Keepalived两节点出现双VIP情况及解决方法【原创】

    1.故障现象 俩台服务器keepalived的vip在俩台服务器同时出现 A:10.70.12.72 B:10.70.12.73 2.问题分析 1).先分析那台服务器在提供服务 A:10.70.12. ...

  7. Python 脚本碎片

    基本输入输出 用户名/密码 #!/usr/bin/env python3 # -*- coding:utf-8 -*- # Liu Lei import getpass username = inpu ...

  8. python3+selenium框架设计02-自动化测试框架需要什么

    什么是自动化测试框架 自动化测试框架能够提供便利给用户高效完成一些事情,比如,结构清晰开发脚本,多种方式.平台执行脚本,良好的日志和报告去跟踪脚本执行结果. 关于自动化测试框架的定义有很多,在我大致理 ...

  9. VC,VB操作XML

    TCHAR buffer[MAX_PATH] = {}; ::GetModuleFileName(NULL, buffer, MAX_PATH); CString strPath = buffer; ...

  10. NOIP提高组—— 问题求解 与 完善程序

    问题求解1: 甲乙丙丁四人在考虑周末要不要外出郊游. 已知①如果周末下雨,并且乙不去,则甲一定不去:②如果乙去,则丁一定去:③如果丙去,则丁一定不去:④如果丁不去,而且甲不去,则丙一定不去.如果周末丙 ...