Python 模块,数据类型,元组、列表、字符串、字典

1. 模块

Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相应的Python库支持,以后的课程中会深入讲解常用到的各种库,现在,我们先来象征性的学2个简单的。

sys

#!/usr/bin/env python
#-*- coding: utf-8 -*-
import sys
print(sys.argv)

#输出
$ python test.py hello world
["test.py","hello","world"]   #把执行脚本时传递的参数获取到了

os

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
os.system("df -h") #调用系统命令

结合起来

import os,sys

os.system(''.join(sys.argv[1:]))  #把用户的输入的参数当作一条命令交给os.system来执行

  

2. 数据类型初识

1.数字

  2 是一个整数的例子。
  长整数 不过是大一些的整数。
  3.23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里,52.3E-4表示52.3 * 10-4。
  (-5+4j)和(2.3-4.6j)是复数的例子,其中-5,4为实数,j为虚数,数学中表示复数是什么?。

int(整型)

  在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
  在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
long(长整型)
  跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
  注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。
float(浮点型)
  浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。
complex(复数)
  复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。
注:Python中存在小数字池:-5 ~ 257
 
2.布尔值
  真或假
  1 或 0
 
3.字符串

  "Hello world"

字符串格式化输出

name = "King golden horn"

print("I am %s" % name)

#输出 I am King golden horn

 

3. 列表

3.1 创建列表

1 name = ["a","b","c","d","a","f"]
2 3 name = list(["a","b","c","d","a","f"])
4 name2 = ["1","2","3","4"]

 

3.2 增加

  • appeng():列表结尾追加
  • insert(位置下标,数据):指定位置添加
  • extend(数据):列表结尾追加数据,如何数据是一个列表,则将列表的数据逐一添加的列表
name.append("g")   # 从最后面插入
name.insert(1,"h")  # 选择插入的位置,1代表下标
name.extend(name2)
print(name)  # 合并 结果是 ['a', 'b', 'c', 'd', 'e', 'f', '1', '2', '3', '4']

3.3 删除

  • pop():删除指定下标的数据,默认删除最后一个,
  • remove():移除列表中某个数据的第一个匹配项
  • del:删除第一个或连续几个元素
  • clear():清空数据
name.pop()            # 删除最后一个元素
name.pop(3)         # 删除下标为3的字符
name.remove("a")   # 删除 a
del name[1]      # 删除下标为1的字符
del name[1:3]     # 删除下标1到3的元素,不包含下标3的字符

3.4 修改

# 修改指定下标的数据
name[0] = 'i'  # 修改,把下标为0的字符串 改成 i

3.5 查询

  • 列表[下标]:查询列表下的元素
  • index(元素):查询元素的下标
  • count("元素"):查询元素的个数
print(name[1])  # 查询下标为1的元素
print(name.index("b"))        # 查询b的下标
print(name[name.index("b")]) # 根据b的下标查找b
print(name.count("a")) #统计有多少个a    

 

3.6 其他操作

  • reverse():反转
  • sort():排序,特殊符号 --> 数字 --> 大写字母 --> 小写字母
  • copy():复制模块
name.reverse()    #反转
print(name)

name.sort    #排序 
print(name)

name3 = name.copy() #浅复制 只复制列表的第一层

import copy    #引入模块
name = copy.deepcopy #深复制 完全复制一份

 

切片取

print(name[1])     #这就把b取出来了,因为b的下标是1,所以 name[1]  写1
print(name[0:2])   #切片  #这就把a,b取出来了,2 的下标是c,因为不包括2所以把a,b取出来了 
print(name[-1])   #这就把f取出来了,因为 -1 代表最后一个
print(name[:2])    #name[:2]=name[0:2]  如果前面是0可以省略
print(name[0:-1:2]) #隔一个取一个值
print("kaer" in name)  # 判断 "kaer" 是否在列表里,存在返回 true 否则返回 false

 

4. 元组

元组跟列表差不多,也是存一组数据,只不过他一单创建,便不能在修改,所以又叫做只读列表

语法:

 1 name = ("a","b","c") 

  

5. 字符串常用操作

name = "my \tname is {name} and i am {year} old"
print(name.capitalize())    #输出>>>Alex    #首字母大写
print(name.count("a"))      #输出>>>2       #统计有几个a
print(name.center(50,"-"))             #打印50个字符如果不够用-补齐把列表放中间
print(name.endswith("ex"))  #输出>>>True    #以什么结尾
print(name.expandtabs(tabsize=30))        #吧tab键换成30个空格
print(name.find("y"))       #输出>>>1       #查找y的下标
print(name.format(name="alex",year=100))
print(name.format_map({"name":"alex","year":11111}))
print(name.isalnum())            #判断是不是阿拉伯数字加阿拉伯字符
print(name.isblpha())            #判断是不是纯英文字符
print(name.isdecimal())          #判断是不是十进制
print(name.isdigit())            #判断是不是一个整数
print(name.isidentifier())       #判断是不是一个合法的标识符
print('ab'.islower())            #判断是不是小写
print('33'.isnumeric())          #是不是只有数字在里面
print(' '.isspace())             #判断是不是空格
print('My Name Is'.istitle())    #判断首字母是不是大写
print('My Name Is'.isprintable())#检查字符串中的所有字符是可打印字符还是空字符串。如果所有字符都是可打印的或为空字符串,则函数返回真,否则返回假。
字符串中可打印的字符包括字母和符号、数字、标点符号和空白。不可打印字符是指那些在打印时不可见且不占用空间的字符(转义字符,如' \n ',' \t ',' \r ',' \x16 ',' \xlf '等)。
print('My Name Is'.isupper()) #判断是不是全是大写 print('+'.join(['1','2','3'])) #输出>>>1+2+3 print(name.just(50,'*')) #保证长度50,不够的用*在后面补齐 print(name.rjust(50,'-')) #保证长度50,不够的用-在前面面补齐 print('Alex'.lower()) #把大写变成小写 print('Alex'.upper()) #把小写变大写 print('alex'.lstrip()) #lstrip去掉左边的空格回车 strip去掉两边的空格回车 print('alex'.rstrip()) #rstrip去掉右边的空格回车 p = str.maketrans('abcdef','123456') #2.2版本 print('alex li'.translate(p)) #输出>>> 115 li print('alex li'.replace('l','L',1)) #把l替换成大写 1是只替换一个 print('alex'.rfind('e')) #从左往走找到最右边的值返回下标 print('alex li'.split()) #按照空格分成列表 输出>>> ['alex','li'] print('1+2\n3+4'.splitlines()) #按换行来分 print('Alex Li'.swapcase()) #大写换下写,小写换大写 print('lex li'.title) #输出>>>Lex Li print('lex li'.zfill(50)) #不够的用0填充 print('alex'.strip()) #strip去掉两边的空格回车 print(name.startswith("my",4,8)) #判断是否以字符串 "my" 开头,返回 True或False ,在第4个开始,第8个结束 print(name.endswith("old")) #判断是否以字符串 "old" 结尾,返回 True或False ,在第4个开始,第8个结束

 

#  translate(table,/)  对字符串进行交换或过滤

String1 = "abc"
String2 = "ghi"
String3 = "ab"
string = "abcdef"
print("Before Translation:", string)
mapping= string.maketrans(String1, String2, String3)
print(mapping)
# translate string
print("After Translation:", string.translate(mapping))


intab = "aeiou"
outab = "12345"
trantab = str.maketrans(intab,outab)
s = "this is string example....wow!!!"
print(s)
print(s.translate(trantab))

可以看到使用translate之前要先使用maketrans()方法返回“table”参数,table是一个映射表,那先了解一下maketrans()

string.maketrans(from, to)   -> from映射到to,所以要求两个字符串一样长, 两个都为空,则为全部字符,那么不会出现替换

 

6. 字典

字典一种key-value的数据类型,使用就像我们上学用的字典,通过笔画,字母来查找对应页的详细内容。
语法:
# 有数据字典
info= {
    'sut1':'1',
    'sut2':'2',
    'sut3':'3',
}
# 空字典
info1 = {}

info2 = dict()

 

 

字典的特性:
  • dict 是无序的
  • key 必须是唯一的,天生去重

6.1 增和修改

语法:字典[key] = value :如果值存在就修改,不存在就增加

info['sut4'] = '11' 

6.2 删除

  • del:删除典中指定键值对
  • pop():删除典中指定键值对
  • popitem():随机删除
  • clear():清空字典
del info['sut1']        # 删除 sut1
info.pop('sut1')       # 删除 sut1
info.popitem()         # 随机删
info.clear()          # 清空字典

6.3 查找

Key值查找

语法:字典[key]

缺点:如果字典中没有key值,则会报错。

info = { "name":"kaer" , "age":18}
print(info["name"]) # kaer
print(info["name2"]) # 保存

 

get()查找

语法:字典.get(key,默认值)

如果查找的key不存在则返回第二个参数(默认值),如果没写默认值,则返回None。

info = { "name":"kaer" , "age":18}
print(info.get("name")) # kaer
print(info.get("name2")) # None
print(info.get("name2","不存在")) # 不存在

 

keys()查找

keys():查找字典中所有的key,返回可迭代对象

info = { "name":"kaer" , "age":18}
print(info.keys())

 

values()查找

values():查找字典中所有的value,返回可迭代对象

info = { "name":"kaer" , "age":18}
print(info.values())

 

items()查找

items():把字典中每对键值对组成一个元组,并把这些元组放在列表中返回

info = { "name":"kaer" , "age":18}
# 把key赋值给k,把value赋值给v
for k,v in info.items():
    print(k,v)

 

fromkeys赋值

# 字典赋值
# [6,7,8] 字典的key,test字典的值
c = info.fromkeys([6,7,8],'test')  #创建一个字典

setdefault
setdefault() 方法和 get()方法 类似, 如果键不存在于字典中,将会添加键并将值设为默认值。
语法:dict.setdefault(key, default=None)
info= {}
info.setdefault('北京',{'昌平':['回龙观','天通苑']})
print(info['北京'])
print(info['北京']['昌平'])

6.4 字典的遍历

info = {"name":"kaer", "age":18}

# 遍历key值
for k in info.keys():
    print("key值:",k," value值:",info[k])
# 遍历value值
for v in info.values():
    print("value值:",v)
# 遍历value值
for k,v in info.items():
    print("key值:",k,"value值:",v)

 7. 推导式

  作用:用一个表达式创建一个有规律的列表和控制一个有规律列表。列表推导式又叫列表生成式。

7.1 列表推导式

while 循环实现
list0 = []
num = 0
while num < 10:
    list0.append(num)
    num += 1
print(list0)
 
for 循环实现
# 方法一:
list1 = []
for i in range(10):
    list1.append(i)
print(list1)
# 方法二:
list2 = [i for i in range(10)]
print(list2)
 
带判断的列表推导式
# 需求:创建0-10的偶数列表
list3 = [i for i in range(10) if i % 2 == 0 and i != 0 ]
# 步长实现 list4 = [i for i in range(0,10,2) if i != 0 ] print(list3) print(list4)

 

 
列表推导式中写多个for循环
list5 = [(i,j) for i in range(4) for j in range(i) ]
print(list5)
# 相当于
list6 = []
for i in range(4):
    for j in range(i):
        list6.append((i,j))
print(list6)

7.2字典推导式

dict0 = {i: i**2 for i in range(5)}
print(dict0)
 
合并两个列表
name = ["kaer","man",18]
title = ["name","gender","age"]
dict1 = {title[i]:name[i] for i in range(len(name))}
print(dict1)
 
提取字典中目标数据大于200的
counts = {"HP":202,"DELL":201,"MAC":199,"MBP":198}
countNum = {k:v for k,v in counts.items() if v >200}
print(countNum)

7.3 集合推导式

set0 = {i**2 for i in range(5)}
print(set0)

  

 

 
 
 
posted @ 2016-07-31 15:51  Crazy丶迷恋  阅读(258)  评论(0编辑  收藏  举报