python 历险记(一)— python 的String,集合(List,元组,Dict)
引言
想学爬虫还是 python 专业啊,之前一直在用 java, 现在决定尝尝鲜,使用 python及爬虫框架来完成网络数据采集。
编程语言之间都是相通的,比如都需要模块化,引入其他文件来实现功能,使用列表等容器来处理数据,都要使用 json 或 xml 来解析和传输数据。
你会发现通过 类比 的方式,带着问题去学习,你会发现走的很快
而且我认为代码示例的作用是 异常强大的, 我会尽量使用代码示例的方式来展示,以满足同学快速学习的需要,也备后续查询。
下面就是在 使用 python 过程中的问题总结,okay,让我们一起来历险吧~
String 有哪些有用的方法?
不管是哪种语言,用的最多的类型估计都是 string (字符串),要想快速入门 python, 掌握 string 也是必须的。
在 java 中使用最多的 string 功能,我也会带着同样的疑问来了解 python 该使用什么方法实现。如果这里没有你要找的方法,可以到 python string 官方地址完整方法去查询
如何拼接字符串?
- 使用
+号来拼接,要注意的是,当有数字的时候一定要转化为字符串格式str(value)才能够相加,不然会报错。 - 使用%进行拼接,和占位符的概念比较类似,这里举个栗子
hour = 9
minutes = 45
print('it\'s %d:%d minutes!' %(hour, minutes))
如何分隔字符串?
# 对字符串分割
split_str = 'a-b-c-d'
print(split_str.split('-'))
如何获取字符串长度
# 获取字符串的长度
print(len('banana'))
如何将 list 拼接成字符串?
# 以 - 做间隔,拼接字符串
join_str_list = ['a', 'b', 'c', 'd']
print('-'.join(join_str_list)) # 这里就是用 - 拼接后的值
如何替换字符串?
str.replace(old, new[, count])
count 表示替换的次数,如果没有指定,则只会替换第一个遇到的
如何去除字符串中的空格?
去除字符串中空格分为 3 种
- 去除两端的空格
- 去除左边的空格
- 去除右边的空格
# 去除字符串中的空格
strToStrip = ' abc '
print(strToStrip.strip()) # 去除两端空格
print(strToStrip.lstrip()) # 去除左边空格
print(strToStrip.rstrip()) # 去除右边空格
如何子字符串是否包含在父字符串中?
child_str = 'abc'
print('abcd'.find(child_str)) # 如果存在就返回首字母下标,不存在返回 -1
python 有哪些有用的容器?
学过 java 的都知道,在 java 中使用最多的容器有 List, Map, Set, Array,这些容器可以让我们方便的存储并操作数据,那么 python 中又有哪些类似的容器可供我们使用呢?
列表 list
python 中也有列表,功能包含了 java 列表,而且更牛的是它可以 包含不同类型的元素
。
['a', 10, 1.5] # 这就是一个列表,只需要方括号包起来即可
如何遍历一个列表
有两种方式可实现
- for 循环的方式,这当然是最常见的
list = ['a', 1, 1.4]
for item in list:
print(item)
在只需要读取列表的元素本身时这种方式当然很优雅。但如果需要获取元素的下标,就力不从心了,这就需要下面的方式。
- 使用内置函数 range 和 len, 操作元素下表
list = ['a', 1, 1.4]
for i in range(len(list)):
list[i] = list[i] * 2
print(list[i])
如何对列表切片?
pyton 中专门有切片操作符 :, 想切多厚切多厚,这可比 java 要方便不少。
通过例子来感受下吧。
alpha_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
print(alpha_list[1:3]) # ['b', 'c']
print(alpha_list[:4]) # ['a', 'b', 'c', 'd']
print(alpha_list[2:]) # ['c', 'd', 'e', 'f', 'g']
print(alpha_list[:]) # ['a', 'b', 'c', 'd', 'e', 'f', 'g']
如何给列表添加元素?
有四种方式
- 在列表尾部添加元素
append(value) - 将一个列表中的每个元素分别添加到另一个列表上
extend(list) - 将一个元素插入到列表的指定位置
insert(index, value) +号,将两个 list 直接相加, 会返回一个新的 list 对象
码字太多了,自己都晕了,直接上代码。
list1 = ['a', 'b', 'c', 'd']
list1.append('e')
print(list1) # ['a', 'b', 'c', 'd', 'e']
list2_1 = ['a', 'b', 'c', 'd']
list2_2 = ['e', 'f', 'g']
list2_1.extend(list2_2)
print(list2_1) # ['a', 'b', 'c', 'd', 'e', 'f', 'g']
list3 = ['a', 'c', 'd']
list3.insert(1, 'b') # ['a', 'b', 'c', 'd']
print(list3)
# 内存多余消耗,不推荐
list4_1 = ['a', 'b']
list4_2 = ['c', 'd']
print(list4_1 + list4_2) # ['a', 'b', 'c', 'd']
删掉元素
也有几种方法可实现
- 修改列表,弹出被删除的值
pop(index) - 知道要删除的元素时
remove(value) - 不需要使用删除的值时
del(index) - 删除多个值
del(index_begin, index_end)
上代码
remove_list_1 = ['a', 'b', 'c']
print(remove_list_1.pop(0))
print(remove_list_1)# ['b', 'c']
remove_list_2 = ['a', 'b', 'c']
del remove_list_2[1]
print(remove_list_2)# ['a', 'c']
remove_list_3 = ['a', 'b', 'c']
remove_list_3.remove('b')
print(remove_list_3) # ['a', 'c']
remove_list_4 = ['a', 'b', 'c']
del remove_list_4[1:2]
print(remove_list_4)# ['a', 'c']
字典 dict
dict 和 java 中 Map 非常类似,也是由 key 和 value 组成的,也是
使用 散列表 的算法存储, 用过 java 的同学就直接把它当做 Java HashMap 来用就可以啦。另外,在语法上要比 java 也要简洁不少。
创建 dict 添加元素
a_dict = dict() # 这样就创建了一个空字典
a_dict['one'] = 1 # 塞进去一个元素
not_empty_dict = {'one': 1, 'two': 2, 'three': 3} # 这是一个包含数据的字典
遍历 dict
使用 for 循环遍历所有字典,可以遍历字典中的 key,这样的遍历是没有特定顺序的,如果想按照顺序遍历需要使用内置函数 sorted
d = {'b': 2, 'a': 1, 'c': 3}
for item_key in d:
print(item_key, d[item_key])
for item_key in sorted(d):
print(item_key, d[item_key])
那我如果想要遍历 dict 中的 values 呢?
还真有一个方法叫 values(), 它会返回一个值集合,并可以应用 in 操作符遍历
d = {'b': 2, 'a': 1, 'c': 3}
for value in d.values():
print(value)
for sorted_value in sorted(d.values()):
print(sorted_value)
元组
什么是元组? java 中可没有听过内置元组这样的数据结构。
在前面已经讲了列表,知道一个列表可以存储多个数据结构。元组和列表很像,但要记住它们间的一个重要区别: 元组是不可变的。
如何创建元组?
- 把各个类型的元素用逗号分隔,就可以得到一个元组,为了好看,常常用括号再围起来
- 使用内置函数
tuple()也可以创建元组
注意,由于元组是不可变的,无法修改它的元素。但我们可以使用将多个元组结合成一个新的元组。(元组也支持 +)
tuple_a = 1, 2, 3, 4, 5
tuple_b = (1, 2, 3, 4, 5)
# tuple 内置函数的参数必须是一个序列
tupe_c = tuple('12345') # 字符串
tuple_e = tuple([1, 2, 3, 4, 5]) # 列表
tuple_f = tuple((1,2,3,4,5)) # 元组
tuple_d = tuple_a + tuple_b
print(tuple_d)
元组有什么用?
既然 python 中有这么个数据结构,自然就有它的用武之地。还别说,它的用途还真不少。
- 交换变量 和 对多个变量赋值 更方便,优雅了
a = 5
b = 4
a,b = b,a
# 等式左边是一个变量的元组
# 等式右边是表达式的元组,可以是(字符串,列表,元组都行)
c,d = (1,2), [1,2,3]
print(c)
print(d)
- 可以在函数中返回多个值,将它们装到元组里就行
def min_max(list):
return min(list), max(list)
num_list = [3, 1, 5, 2]
print(min_max(num_list))
其他
上面讲述的都是一些大的主题,除了这些,还有一些相对小些的。
虽然小,但也很重要。这些小且重要的部分都在这个部分存放吧。
全局变量是如何处理的?
我们知道 java 中由于变量类型的存在,可以在一个 class 内声明全局变量,从而在 class 的各个方法中读取和赋值。
而这点在 python 中却是行不通的,因为 python 中没有变量类型, 如果在文件中声明一个全局变量,再在函数内对这个变量赋值,会直接导致错误产生。这是因为在函数内又重新创建了一个局部变量。读取全局变量也有这个问题。
那该怎么办呢?嗯~o( ̄▽ ̄)o global 关键字就要登场了。
在函数内部,使用全局变量前,先用 global 关键字声明下这个变量,表示这个变量是全局变量,后面再使用就 okay啦。
上栗子...
g_variable = 3
def test_g_variable():
global g_variable
print(g_variable) # 3
g_variable = 2
print(g_variable) # 2
test_g_variable()
结语
上面并没有把 python 讲完,还有 类和对象,文件,JSON处理, 网络 等重要主题,这些会在下篇文章中涉及,敬请期待。
python 历险记(一)— python 的String,集合(List,元组,Dict)的更多相关文章
- Python把json格式的string对象转变成dict对象操作、Python3不能使用urllib2、urllib.parse.urlencode(params).encode(encoding='UTF8')
son格式的string对象转变成dict对象操作 content=eval(content)#json字典转化 Python3不能使用urllib2 直接使用urllib.request替换urll ...
- Python数据类型的内置函数之tuple(元组),dict(字典),set(集合)
Python数据类型内置函数 - str(字符串) - list(列表) - tuple(元组) - dict(字典) - set(收集) tuple(元组)的操作 - (count)统计元组中元素出 ...
- python 数据类型: 字符串String / 列表List / 元组Tuple / 集合Set / 字典Dictionary
#python中标准数据类型 字符串String 列表List 元组Tuple 集合Set 字典Dictionary 铭记:变量无类型,对象有类型 #单个变量赋值 countn00 = '; #整数 ...
- 【转】python 历险记(四)— python 中常用的 json 操作
[转]python 历险记(四)— python 中常用的 json 操作 目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编 ...
- python 历险记(四)— python 中常用的 json 操作
目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编码和解码? 常用的 json 操作有哪些? json 操作需要什么库? 如何 ...
- python 历险记(三)— python 的常用文件操作
目录 前言 文件 什么是文件? 如何在 python 中打开文件? python 文件对象有哪些属性? 如何读文件? read() readline() 如何写文件? 如何操作文件和目录? 强大的 o ...
- python 历险记(六)— python 对正则表达式的使用(上篇)
目录 引言 什么是正则表达式? 正则表达式有什么用? 正则表达式的语法及使用实例 正则表达式语法有哪些? 这些正则到底该怎么用? 小结 参考文档 系列文章列表 引言 刚接触正则表达式,我也曾被它们天书 ...
- python 历险记(五)— python 中的模块
目录 前言 基础 模块化程序设计 模块化有哪些好处? 什么是 python 中的模块? 引入模块有几种方式? 模块的查找顺序 模块中包含执行语句的情况 用 dir() 函数来窥探模块 python 的 ...
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...
- Python 标准库笔记(1) — String模块
原文出处: j_hao104 String模块包含大量实用常量和类,以及一些过时的遗留功能,并还可用作字符串操作. 1. 常用方法 常用方法 描述 str.capitalize() 把字符串的首字母大 ...
随机推荐
- 利用spring boot+vue做的一个博客项目
技术栈: 后端 Springboot druid Spring security 数据库 MySQL 前端 vue elementUI 项目演示: GitHub地址: 后端:https://githu ...
- UVALive - 6434 (思维题)
题目链接:https://vjudge.net/contest/241341#problem/A 题目大意,给你n个数字,让你分成m组,每组的花费为每组的最大值-最小值,总的花费就是各组花费相加,要求 ...
- CF986C AND Graph
半年前做的一道题现在还是不会 x&y=0 意味着,x的补集的子集都是和x直接相连的 不妨令图中的点数就是2^n 那么可以直接从x^((1<<n)-1)开始记忆化爆搜,路上遇到的都是 ...
- Codeforces Round #516 (Div. 2, by Moscow Team Olympiad) D. Labyrinth
http://codeforces.com/contest/1064/problem/D 向上/向下加0,向左/右加1, step = 0,1,…… 求的是最少的步数,所以使用bfs. step=k ...
- solr6.4.2之webservice兼容升级
摘要:这次solr底层升级是一次比较大的升级.从底层搜索引擎 solr4.8 升级到 solr6.4.2,由于solr底层从6.x开始以来的jdk必须指定为1.8,而且很多内部实现类都已经废弃或者干脆 ...
- make_blobs
一.make_blobs简介 scikit中的make_blobs方法常被用来生成聚类算法的测试数据,直观地说,make_blobs会根据用户指定的特征数量.中心点数量.范围等来生成几类数据,这些数据 ...
- tomcat配置好后,启动eclipse中的server,不能出现有猫的页面,提示404
原因:tomcat与eclipse中的server未关联起来 解决办法:双击servers中的server,在Server Locations中选中第二项,保存之后再进行刚才的操作就好了.
- webapi框架搭建-webapi异常处理
webapi框架搭建系列博客 前言 上一篇我们已经完成了项目的日志管理,在项目开发中日志会经常记录程序中的异常,供后续问题排查使用.本篇讲如何在webapi里加入异常处理机制. 目的和原则 1.程序任 ...
- win7屏蔽ctrl+alt+up/down快捷键/ (eclipse冲突)
win7屏蔽ctrl+alt+up/down快捷键/ Eclipse有个非常好用的快捷键(当然Eclipse好用的快捷键有N个)Ctrl+Alt+UP/DOWN,用于复制当前行的内容,用法很简单, ...
- C# 优化程序的四十七种方法
一.用属性代替可访问的字段 1..NET数据绑定只支持数据绑定,使用属性可以获得数据绑定的好处: 2.在属性的get和set访问器重可使用lock添加多线程的支持. 二.readonly(运行时常量) ...