Python基础(4)——字符串、列表、元组、字典

一、字符串 String:

•双引号或者单引号中的数据,就是字符串
*切片的语法:[起始:结束:步长]:

起始与结束值分别为半开半闭区间,如下在sublime的IPython下运行:


>>> name = 'abcdefg'
>>> name[0]  #以下标访问字符串中的元素
'a'
>>> len(name)  #len()函数求出字符串长度
7
>>> name[0:len(name)-1]
'abcdef'
>>> name[0:len(name)]  #对比发现范围为半开半闭
'abcdefg'


关于步长


>>> name[1:4:2]  #步长为跨越的字符个数 从1开始到3结束 跨越两个字符输出
'bd'
>>> name[::-1]  # 步长为-1表示逆向输出
'gfedcba'

字符串中的常用函数方法


>>> str1 = 'hello world,python'
>>> str1.find('py',0,len(str1))  #find()方法用来字符串匹配,并返回第一处匹配的位置,从下标0到结尾寻找
12
>>> str1.find(' ')
5
>>> str1.find('a')  #没有找到  返回-1
-1
>>> str1.index("hello",0,len(str1)) #index()方法类似于find()但是匹配失败会返回异常
0
>>> str1.index("Hello",0,len(str1))
Traceback (most recent call last):
  File "<console>", line 1, in <module>
ValueError: substring not found


>>> str1.count("h",0,len(str1)) #count()方法表示统计目标字符出现次数  后面两个参数分别表示起始与结束位置
2
>>> str1.replace("h","r",str1.count("h")) #replace()方法表示将h替换为r,并且替换h出现的次数
'rello world,pytron'
>>> str1.split(" ")  #字符串分割方法
['hello', 'world,python']
>>> str1.split(",",2)  #2表示分割次数
['hello world', 'python']
>>> str1 = "hello world Python"
>>> str1.startswith("h")  #判断是否以h开头
True
>>> str1.startswith("w",5)  #判断str1[5]是否为w
False
>>> str1.startswith("w",6)  #判断str1[6]是否为w
True
>>> str.endswith("n")  #类似于startswith()
True
>>> str.endswith("j")
False
>>> str1.strip("h")  #strip() 方法用于移除字符串头尾指定的字符(默认为空格)
'ello world Python'
>>> str1.capitalize()  #首字母大写
'Hello world python'
>>> str.rjust(30,"0")  #rjust() 返回一个原字符串右对齐,并使用空格填充至长度 30 的新字符串。如果指定的长度小于			  #字符串的长度则返回原字符串。
'000000000000Hello world python'
>>> str.ljust(30,"0")  #类似于rjust()
'Hello world python000000000000' 
>>> str.center(30," ")   #以30的宽度居中显示,并填充空格
'      Hello world python      '
>>> str.center(30,"-")
'------Hello world python------'

index()与rindex()的区别:相对称的关系,和KMP算法有点相似
>>> s = "love Python,dislike Python"
>>> s.index("Python")  #返回左边第一个子串'python'的下标
5
>>> s.rindex("Python")  #返回右边第一个子串'python'的下标
20

列举一道字符串分割题目
返回使用空格或者'\t'分割后的倒数第二个子串  str = "haha nihao a  \t height \t woshi nide \t hao \npengyou"

有些迷惑人的题目,据说是面试题,分析题意后大概理解应该用字符串分割方法来解决,但是里面包含了制表符,空格,换行,怎样进行分割?可以回归分割方法的原始定义:


split()方法语法:
str.split(str="", num=string.count(str)).
str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。

num -- 分割次数。


看出当split()不加参数时,默认对空格,换行,制表符进行分割
因此应该用不带参数的分割方法

str = "haha nihao a  \t height \t woshi nide \t hao \npengyou"
str1 = str.split()
print(str1[-2])

结果为  'hao'


二、列表 List:


序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
Python有6个序列的内置类型,但最常见的是列表和元组。
序列都可以进行的操作包括索引,切片,加,乘,检查成员。
此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。
列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。
列表的数据项不需要具有相同的类型
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:

>>> names = ['liubei','guanyu','zhangfei',3]
>>> names[0]
'liubei'
>>> names[len(names)-1]
3
>>> names[len(names)-2]
'zhangfei'

与字符串的索引一样,列表索引从0开始。列表可以进行截取、组合等。


列表相关操作:
•in(存在),如果存在那么结果为true,否则为false
•not in(不存在),如果不存在那么结果为true,否则false

#-*-coding:utf-8-*-
#列表添加元素操作
names = ['liubei','guanyu','zhangfei',3]
for x in names:  #利用for遍历列表
	print(x)
i = 0
while i < len(names): #利用while遍历列表
	print(names[i])
	i += 1
str = ["wangbo","dxnaicnl","cnewiu"]
names.extend(str) #整个添加进去
names.insert(4,"xnsac") #下标添加  位置4添加“xnsac”
for x in names:
	print(x)

#-*-coding:utf-8-*-
#定义变量A,默认有3个元素
A = ["xiaoWang","xiaoZhang","xiaoHua"]
print("------添加之前,列表A的元素------")
for tempName in A:
	print(tempName)
print("\n")
#提示并添加元素
A[1] = "xiaoLu"  #修改元素
temp = raw_input("请输入要添加的学生姓名:") #Python 2.7 下raw_input
A.append(temp)  #单个元素添加到末尾
print("\n")
#添加完成后,遍历输出添加后的列表
print("------添加之后列表A的元素-------")
for tempName in A:
	print(tempName)
print("\n")


#待查找的列表
#A = ["xiaoWang","xiaoZhang","xiaoHua"]
#获取用户要查找的元素
findName = raw_input("请输入需要查找的名字:")
#进行遍历查找
if findName in A:
	print("他在列表中!")
elif findName not in A:
	print("他不在列表中!")


#获取用户要删除的元素
delName = raw_input("请输入要删除的人:")
#进行删除操作
A.remove(delName)
#遍历输出
print("-------删除后列表A的元素-------")
for tempName in A:
	print(tempName)
print("\n")


del A[0] #删除第一个元素
for tempName in A:
	print(tempName)
print("\n")


A.pop() # 删除末尾元素  并返回末尾元素
for tempName in A:
	print(tempName)
print("\n")

对列表元素进行排序
>>> a = [3,6,4,2,14]
>>> a.sort() # 表示从小到大
>>> a
[2, 3, 4, 6, 14]
>>> a.sort(reverse = True)  #表示从大到小
>>> a
[14, 6, 4, 3, 2]


>>> a = ["a","b","f","d"]
>>> a.sort()  # 对字符串列表进行排序
>>> a
['a', 'b', 'd', 'f']

三、元组 Tup


Python的元组与列表类似,不同之处在于元组的元素不能修改
元组使用小括号,列表使用方括号
元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。
如下实例:

tup1 = ('physics', 'chemistry', 1997, 2000);
tup2 = (1, 2, 3, 4, 5 );
tup3 = "a", "b", "c", "d";

创建空元组
tup1 = ();


元组中只包含一个元素时,需要在元素后面添加逗号:
tup1 = (50,);


元组与字符串类似,下标索引从0开始,可以进行截取,组合等。
例如:



>>> a = ('a', 'b', 'c', 'a', 'b')
>>> a.count("b")  #输出b的个数  count方法
2

a = ('a', 'b', 'c', 'a', 'b')
a.index('a', 1, 3) 

输出会报错,无法在1到2区间内找到'a'


元组中的元素值是不允许修改的,但我们可以对元组进行连接组合:(元组建可以用+、*进行运算)
# -*- coding: UTF-8 -*-


tup1 = (12, 34.56);
tup2 = ('abc', 'xyz');


# 以下修改元组元素操作是非法的。
# tup1[0] = 100;


# 创建一个新的元组
tup3 = tup1 + tup2;
print tup3;


元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组

tup = ('physics', 'chemistry', 1997, 2000);


print tup;
del tup;
print "After deleting tup : "
print tup;

四、字典 Dictionary


字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:
d = {key1 : value1, key2 : value2 }


示例代码如下:



>>> info = {name:zhangsan,age:18}
>>> info["name"]
'zhangsan'
>>> info["school"] = "hpu"
>>> info
{'age': 18, 'name': 'zhangsan', 'school': 'hpu'}
>>> del info['name']
>>> info
{'age': 18, 'school': 'hpu'}

在我们不确定字典中是否存在某个键而又想获取其值时,可以使用get方法,还可以设置默认值:
age = info.get('age')


>>> age = info.get("age") #并不知道是否有age
>>> print(age)
None  #age是none 
>>> age = info.get("age",18)
>>> age  #为age设置默认值
18

相关字典操作如下:


info = {'name':'班长', 'sex':'f', 'address':'地球亚洲中国北京'}
# print('id为:%d'%info['id'])#程序会终止运行,因为访问了不存在的键
newId = input('请输入新的学号:')
info['id'] = int(newId)
print('添加之后的id为:%d'%info['id'])
#如果在使用  变量名['键'] = 数据 时,这个“键”在字典中,不存在,那么就会新增这个元素


# del info
# print(info)
info.clear() #清空字典


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

wangbowj123

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值