1 eval函数
- 描述:实现不同类型数据的转化
- str To list 、dict、tuple
1.1 str2list
>>str="[[1,3],[5,7],[6,9]]"
>>print(type(a))
<class 'str'>
>>l=eval(str)
>>print(type(l))
<class 'list'>
>>print(l)
[[1,3],[5,7],[6,9]]
b = "tianlanlan"
d = list(b)
print("type of d after list function processed: {}".format(type(d)))
print("d: {}".format(d))
- Result
type of d after list function processed: <class 'list'>
d: ['t', 'i', 'a', 'n', 'l', 'a', 'n', 'l', 'a', 'n']
- Analysis
list函数即遍历字符串,将各元素添加到列表中,功能类似下面实现:
b = "tianlanlan"
def list_def(string):
c = []
for i in range(len(string)):
c.append(b[i])
return c
print("c: {}".format(c))
out = list_def(b)
print("self define list function: {}".format(out))
- Result
self define list function:['t', 'i', 'a', 'n', 'l', 'a', 'n', 'l', 'a', 'n']
1.2 str2dict
>>str="{1:'a', 2:'b'}"
>>print(type(a))
<class 'str'>
>>d=eval(str)
>>print(type(d))
<class 'dict'>
>>print(d)
{1:'a',2:'b'}
1.3 str2tuple
>>str="([1,3],[5,7],[6,9])"
>>print(type(a))
<class 'str'>
>>t=eval(str)
>>print(type(t))
<class 'tuple'>
>>print(l)
([1,3],[5,7],[6,9])
1.4 处理null
当dict中有null值时,eval不能处理null值,会报错,实例如下:
str_data = '[{"data":null, "name":"xiaohong"}]'
list_data = eval(str_data)
print("list data type: {}".format(type(list_data)))
- 报错提示
NameError Traceback (most recent call last)
<ipython-input-2-b013a02987a5> in <module>
1 str_data = '[{"data":null, "name":"xiaohong"}]'
----> 2 list_data = eval(str_data)
3 print("list data type: {}".format(type(list_data)))
<string> in <module>
NameError: name 'null' is not defined
eval不能处理null.
- 解决方案
定义全局变量null,并赋值
global null
null = ""
str_data = '[{"data":null, "name":"xiaohong"}]'
list_data = eval(str_data)
print("list data type: {}".format(type(list_data)))
- 结果
list data type: <class 'list'>
2 数据类型
2.1 字符串(String)
- 语法:
单引号或双引号括起来,使用反斜杠\转义特殊字符"xindaqi"
>>str = "abc"or str = 'abc'
>>print(type(str))
<class 'str'>
>>print(str)
abc
>>print("ab\nbc")
ab
bc
- 截取字符串语法:
语法:变量[头下标:尾下标]
>>print(str[0:1])
ab
>>print(str+"def")
abcdef
2.2 列表(List)
- 语法:
方括号括起来,元素用逗号隔开["a", "b"]
2.2.1 Demo1:直接输出
>>li = ['a','b','c']
>>li2 = ['d','e']
>>print(type(li))
<class 'list'>
>>print(li)
['a','b','c']
2.2.2 Demo2:合并
>>li = ['a','b','c']
>>li2 = ['d','e']
# li.extend(li2)
>>print(li+li2)
['a','b','c','d','e']
>>print(li.extend(li2))
['a','b','c','d','e']
2.2.3 Demo3: 重复输出
>>print(li*2)#重复输出2次
['a','b','c','a','b','c']
2.2.4 Demo4: 遍历
l_1 = ["a", "b", "c"]
for i in range(len(l_1)):
print("List element: {}".format(l_1[i]))
List element: a
List element: b
List element: c
2.2.5 截取字符串语法:
语法:变量[头下标:尾下标]
- Demo5: 截取
str = "helloworld"
# 截取全部
cut_1 = str[:]
# 开始截取到倒数第一个字符前一个字符
cut_2 = str[:-1]
# 第一个字符截取到第三个字符
cut_3 = str[1:3]
# 第二个字符截取到结尾
cut_4 = str[1:]
# 截取倒数第二个字符
cut_5 = str[-2]
# 新建倒序字符串
cut_6 = str[::-1]
# 倒数第三个开始截取,至结尾
cut_7 = str[-3:]
# 隔至指定步长截取
cut_8 = str[0:6:2]
print("cut_1: {}".format(cut_1))
print("cut_2: {}".format(cut_2))
print("cut_3: {}".format(cut_3))
print("cut_4: {}".format(cut_4))
print("cut_5: {}".format(cut_5))
print("cut_6: {}".format(cut_6))
print("cut_7: {}".format(cut_7))
print("cut_8: {}".format(cut_7))
cut_1: helloworld
cut_2: helloworl
cut_3: el
cut_4: elloworld
cut_5: l
cut_6: dlrowolleh
cut_7: rld
cut_8:hlo
2.2.6 list2str
- 整型数据list2str
list_1 = [1, 2, 4]
list_2 = []
for data in list_1:
list_2.append(str(data))
print("list to string: {}".format(list_2))
# list_1 = ["aafjdk", "bfhajdh", "chdfajdrjejiao"]
li2str = ",".join(list_2)
print("list transform to string: {}".format(li2str))
- 结果
list to string: ['1', '2', '4']
list transform to string: 1,2,4
现将整型数据转为str存入list,再使用join处理list.
- 字符串数据list2str
li = ["hello", "world"]
li2str = ",".join(li)
print("list to string: {}".format(li2str))
- 结果
list to string: hello,world
2.2.7 list排序
- Demo
liData = ["abc", "abd", "aba"]
liData.sort()
# 顺序排序
print("list queue:{}".format(liData))
# 逆序排序
liData.sort(reverse=True)
print("list queue:{}".format(liData))
- Result
list queue:['aba', 'abc', 'abd']
list queue:['abd', 'abc', 'aba']
2.3 字典(Dictionary)
- 语法:
花括号括起来,元素格式为键值对且用逗号隔开,{'name':'xindaqi'}
。
2.3.1 基本操作
>>dic = {'name':xdq,'sex':'male'}
>>print(type(dic))
<class 'dict'>
>>print(dic)
{'name':xdq,'sex':'male'}
>>print(dic.keys())#输出所有键
dict_keys(['name','sex'])
>>print(dic.values())#输出所有值
dict_values('xdq','male')
- 直接从键值对序列构建数据字典
>>dict([('name','xdq'),('sex','male')])
{'name':'xdq','sex':'male'}
- 通过key取值
global null
null = ""
str_data = '[{"data":null, "name":"xiaohong"}]'
list_data = eval(str_data)
print("list data type: {}".format(type(list_data)))
datas = list_data[0]["name"]
print("datas:{}".format(datas))
list data type: <class 'list'>
datas:xiaohong
2.3.2 字典遍历
dict_data = {"name":"tianlanlan", "sex":"male", "address":"shenzhen"}
keys = dict_data.keys()
for k in keys:
print("keys in dictionary: {}".format(k))
values = dict_data.values()
for v in values:
print("values in dictionary: {}".format(v))
for k, v in dict_data.items():
print(k, v)
for k, v in zip(keys, values):
print(k, v)
- Result
keys in dictionary: name
keys in dictionary: sex
keys in dictionary: address
values in dictionary: tianlanlan
values in dictionary: male
values in dictionary: shenzhen
name tianlanlan
sex male
address shenzhen
name tianlanlan
sex male
address shenzhen
2.3.3 字典排序
voc = {"a":3, "b":10, "c":0}
'''按键(key)排序,默认正向有小到大排序'''
voc_0 = sorted(voc)
print("voc_0: {}".format(voc_0))
'''按值(value)反向排序:由大到小'''
voc_1 = sorted(voc, key=voc.get, reverse=True)
print("voc_1: {}".format(voc_1))
'''按值(value)正向向排序:由小到大(默认)'''
voc_2 = sorted(voc, key=voc.get)
print("voc_2: {}".format(voc_2))
'''按值排序,输出key:value'''
voc_3 = sorted(voc.items(), key=lambda d:d[1])
print("voc_3: {}".format(voc_3))
- Result
voc_0: ['a', 'b', 'c']
voc_1: ['b', 'a', 'c']
voc_2: ['c', 'a', 'b']
voc_3: [('c', 0), ('a', 3), ('b', 10)]
2.3.4 get方法
描述:通过键名获取键对应的值,若没有找到键名,则返回默认。
dic = {"a":1, "b":2, "c":3}
value = dic.get("a", 0)
print("value: {}".format(value))
value_1 = dic.get("d", 0)
print("value_1: {}".format(value_1))
- Result
value: 1
value_1: 0
2.3.5 按key获取value
- Script
dict_data = {"name":"xiaohong", "address":"China"}
print("name from dict:{}".format(dict_data["name"]))
- Output
name from dict:xiaohong
2.4 元组(Tuple)
- 语法:
小括号括起来,元素用逗号隔开('a', 'b')
。
>>t = ('a','b','c')
>>t2 = ('d','e')
>>print(type(t))
<class 'tuple'>
>>print(t)
('a','b','c')
>>print(t+t2)
('a','b','c','d','e')
>>print(t*2)
('a','b','c','a','b','c')
2.5 集合(Set)
- 语法:
使用花括号括起来,元素用逗号隔开,空集合为set(),不是{},{'a', 'b'}
。
>>s = {'python2','python3','python2'}
>>s2 = {'python2','matlab'}
>>print(type(s))
<class 'set'>
>>print(s)
{'python3','python2'}#去重
>>print(s2)
{'matlab','python2'}
>>print(s-s2)#取差集,输出s减去差值后的元素
{'python3'}
>>print(s2-s)
{'matlab'}
>>print(s|s2)#取并集
{'matlab','python3','python2'}
>>print(s&s2)#取交集
{'python3'}
>>print(s^s2)#取不同时存在的元素
{'matlab','python3'}
3 sys.argv函数
sys.argv是一个list,从外部获取参数,第一个参数list[0]是自身程序名称。
#获取自身程序名称
sys.argv[0]
#获取外部参数
sys.argv[1]
sys.argv[2]
源码functionTest.py
import sys
a = sys.argv
b = sys.argv[0]
c = sys.argv[1]
d = sys.argv[2]
print(type(a))
print(len(a))
print(a)
print(b)
print(c)
print(d)
结果解析
#python/python3 functionTest.py xdq zww
#从外部输入xdq zww(空格隔开)
<class 'list'>#sys.argv是list类型
3#list长度为3,分别是自身function.py xdq zww
['functionTest.py', 'xdq', 'zww']#sys.argv list数据
functionTest.py#sys.argv[0]的值
xdq#sys.argv[1]的值
zww#sys.argv[2]的值
4 str与bytes
- Demo
# 字节数据
bytes_data = b'tinalanlan'
print("bytes data: {}".format(bytes_data))
print("type of bytes data: {}".format(type(bytes_data)))
# 字节转字符串
bytes2str = bytes_data.decode('utf8')
print("bytes2str data: {}".format(bytes2str))
print("type of bytes2str data: {}".format(type(bytes2str)))
# 字符串转字节
str2bytes = bytes2str.encode('utf8')
print("str2bytes data: {}".format(str2bytes))
print("type of str2bytes data: {}".format(type(str2bytes)))
- Result
bytes data: b'tinalanlan'
type of bytes data: <class 'bytes'>
bytes2str data: tinalanlan
type of bytes2str data: <class 'str'>
str2bytes data: b'tinalanlan'
type of str2bytes data: <class 'bytes'>
- Analysis
(1) 字符串与字节的互转均需要使用utf8
;
(2) 字节转字符串使用解码decode;
(3) 字符串转字节使用编码encode;
5 ndarray2list
import numpy as np
a = np.array([1, 2, 3])
print("a: {}".format(a))
b = a.tolist()
print("b: {}".format(b))
- Result
a: [1 2 3]
b: [1, 2, 3]
- Analysis
numpy.ndarray格式的数据使用tolist可转化为列表。
6 小结
6.1字符串
- 字符串元素不可修改。
- 反斜杠可以用来转义,使用r可以使反斜杠不发生转义。
- 字符串可以使用“+”拼接,“*”重复输出。
- 索引方式:从左到右以0开始索引,从右往左以-1开始。
6.2 列表
- 列表中的元素是可以改变的。
- 列表写在方括号中间,元素用逗号隔开。
- 列表可以被索引和切片。
- 列表可以拼接。
- 索引方式:从左到右以0开始索引,从右往左以-1开始。
6.3 字典
- 字典是一种映射类型,元素是键值对。
- 字典的关键字必须为不可变类型,且不可重复。
- 创建字典使用花括号。
6.4元组
- 元组元素不能修改。
- 元组可以被索引和切片。
- 元组可以使用“+”拼接。
- 索引方式:从左到右以0开始索引,从右往左以-1开始。
6.5 bytes与str
bytes
和str
可解决ascii与UTF8问题,即python2
和python3
的数据兼容问题.
字符串、列表、元组为有序类型;字典、集合为无序类型,集合数据不重复。
7 总结
序号 | 函数 | 功能 |
---|---|---|
1 | eval | 去除字符串的引号,不能处理null的键-值组合,使用全局变量global null |
2 | tolist | numpy.ndarray数据转化为list |
3 | data.decode | 字节数据解码为字符串 |
4 | data.encode | 字符串编码为字节数据 |
5 | data.keys | 遍历字典的键key |
6 | data.values | 遍历字典的值value |
7 | lists.extend | 整体拆分为单个元素放入列表 |
8 | lists.append | 整体作为列表元素,不进行拆解 |
9 | list(str) | 将字符串str转为列表,列表中的元素为字符串的拆解元素 |
10 | len(str) | 获取字符串字节数 |
[参考文献]
[1]https://www.cnblogs.com/kilometerwine/p/9712329.html
[2]http://www.runoob.com/python/att-dictionary-get.html
[3]https://blog.csdn.net/cn_wk/article/details/51006307
[4]https://www.cnblogs.com/benchdog/p/9068591.html