Python之字符串,列表,集合,字典,参数解析

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

bytesstr可解决ascii与UTF8问题,即python2python3的数据兼容问题.

字符串、列表、元组为有序类型;字典、集合为无序类型,集合数据不重复。

7 总结

序号函数功能
1eval去除字符串的引号,不能处理null的键-值组合,使用全局变量global null
2tolistnumpy.ndarray数据转化为list
3data.decode字节数据解码为字符串
4data.encode字符串编码为字节数据
5data.keys遍历字典的键key
6data.values遍历字典的值value
7lists.extend整体拆分为单个元素放入列表
8lists.append整体作为列表元素,不进行拆解
9list(str)将字符串str转为列表,列表中的元素为字符串的拆解元素
10len(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


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天然玩家

坚持才能做到极致

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值