python学习记录(2)——字符串,字典,列表,元组

索引

从左到右索引默认0开始的,从右到左索引默认-1开始的
和range函数类似利用索引调用字符串,列表等的元素时,遵循前闭后开的原则:

a=[2,1,5,3,7,1]
a[2:]
[5, 3, 7, 1]
a[1:4]
[1, 5, 3]
a[2:-1]
[5, 3, 7]

使用索引的基本结构是[start : end : step size]
所以当步长为负数时就可以做到翻转列表,但是需要注意的是,此时start和end也反过来了,所以如果想得到切片[5,1,2]则应写成:

a[2::-1]
[5,1,2]
a[::-1]   #可以完全翻转列表
[1, 7, 3, 5, 1, 2]

对于多维数组:

b=[[1,2,3,4],[9,8,71]]
b[1][2]
7

字符串

  1. 赋值问题
    字符串是不可变对象,不要试图用下标的方法去改变字符串的值。
    +是字符串连接运算符,*是重复操作,**表示乘方运算:

例子:

if x[0]=="-":
	y[0]="-"

报错:

TypeError: 'str' object does not support item assignment
    y[0]="-"

改正

if x[0]=="-":
	y+=x[0]   #即y=y+x[0]
  1. str()
    str()函数可以将非字符串值表示成字符串:
age=23
message="Happy "+str(age)+"rd Birthday"+"!"*4
print(message)

输出:

Happy 23rd Birthday!!!!
  1. 删除元素
  • 使用strip函数:
    令s为字符串,rm为要删除的字符序列.。
    只能删除开头或是结尾的字符或是字符串,不能删除中间的字符或是字符串。
    s.strip(rm) 删除s字符串中开头、结尾处的rm字符序列
    s.lstrip(rm) 删除s字符串中开头处的rm字符序列(left)
    s.rstrip(rm) 删除s字符串中结尾处的rm字符序列(right)
    注意: 删除操作中python无视字符串顺序,也就是只要开头或结尾有这些字符,无论是什么排列顺序,一律删除。strip函数操作会输出删除后的字符串,但是不会改变原字符串
s="learnpythoneal"
s.strip("ealn")
#out:
'rnpytho'

s.lstrip("lean")
#out:
'rnpythoneal'

s.rstrip("lean")
#out:
'learnpytho'

print(s)
'learnpythoneal'		#以上操作均不改变s本身
  • 利用索引
    删除指定前几个或后几个元素,可以通过索引完成
  1. 常用函数
  • split()
    通过指定分隔符,对字符串分割并返回列表;分隔符默认为所有空字符(包括空格,换行,制表符等)
str.split(分隔符, 分割次数)

注:分隔符不能填’',会报错empty separator,若要分割没有空格的字符串,可以使用列表解析式

  • join()
    将序列中的元素以指定的字符连接生成一个新的字符串。
str.join(sequence)

其中str是指定字符,sequence是待连接的序列

  • 大小写转换
    str.lower()——大写变小写
    str.upper()——小写变大写
    capitalize()——首字母大写
    str.title()——每个单词首字母大写
    str.swapcase()——大小写字母交换

字典

python中字典是键-值对。
每个键都和一个值相关联,可以使用键来访问与之关联的值。其中值可以是python中的任何对象,如:数字,字符串,列表乃至字典。

  1. 创建字典:
字典名={1:1,键2:2,...}
  1. 访问字典中的值(如键1的值):
字典名[1]
  1. 添加键-值对:
alien={}	#创建空字典
alien['color']='green'
alien['points']=5	#添加两个键-值对
print(alien)
  1. 删除键-值对
del alien['points']

注意:del删除的是变量,而不是数据。del可以作用于某个对象,如字典、列表,也可以作用于对象中的某个元素。但是不可以用于字符串。

  1. 遍历
#遍历键-值对,需要声明两个变量用以存储键,值
for key, value in alien.items():	
	print("\nKey:"+key)			
	print("\nValue:"+value)
#python中对某个对象使用某种方法常用模式:对象.方法()
#items()可返回键-值对列表

#遍历所有键
for k in alien.keys():
	print(k.title())
#title()可以使字符串首字母大写
#不加.keys()也可以,因为遍历字典默认遍历键

#遍历所有值:
for v in alien.values():
	print(v.title())

注意:遍历字典时,键-值对返回顺序和存储顺序不同,python不关心存储顺序只关心存储关系。如果想按一定顺序可以在for循环上对键加sorted()

列表

列表的许多规则和字符串类似,如索引。同样的,列表也不可以直接通过下标的方式添加元素,但是可以通过下标的方式更改元素。

motorcycles=['honda','yamaha','suzuki']		#创建列表
  1. 末尾添加元素
motorcycles.append('ducati')

注:extend() 、append()、+ 与 += 均可达到末尾添加元素的效果:

  • append()是向列表尾部追加一个新元素,列表只占一个索引位,在原有列表上增加。
  • extend()向列表尾部追加一个列表,将列表中的每个元素都追加进来,在原有列表上增加。
  • +与extend()在效果上相同,但是实际上生成了一个新的列表来存放这两个列表的和,只能用在两个列表相加上。
  • +=与extend()效果一样
  1. 插入元素(通过指定下标)
motorcycles.insert(0,'ducati')
  1. 删除元素
#使用del,前提是知道要删除元素的索引
del motorcycles[0]

#使用pop,可删除列表任何位置元素,并继续使用该值;不加索引时,默认最后一个
popped_motorcycles=motorcycles.pop(0)		#被删除的元素
motorcycles									#删除完元素后的列表

#使用remove,根据值删除元素,但是注意只能删除第一个值,如果该值重复出现要用循环删除
motorcycles.remove('ducati')
  1. 列表翻转——reverse()
    列表内置方法,原地对列表翻转,无返回值

习题

给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。(来自力扣题库)

解答

def romanToInt(self, s):
	"""
	:type s: str
	:rtype: int
	"""
	y=0
	Rome={"I":1,"V":5,"X":10,"L":50,"C":100,"D":500,"M":1000}
	for i in range(len(s)-1):
		if Rome[s[i]]<Rome[s[i+1]]:
			y-=Rome[s[i]]
		else:
			y+=Rome[s[i]]
	y+=Rome[s[len(s)-1]]
    return y

元组

列表是可以修改的,Python将不能修改的值称为不可变的,而不可变的列表被称为元组。

元素不可变

元组看起来犹如列表,但使用圆括号而不是方括号来标识。定义元组后,就可以使用索引来访问其元素,就像访问列表元素一样。
例如:如果有一个大小不应改变的矩形,可将其长度和宽度存储在一个元组中,从而确保它们是不能修改的:

[in]dimensions=(50,100)
[in]dimensions[0] = 250			#试图修改元组中的元素
[out]							#报错
TypeError                                 Traceback (most recent call last)
<ipython-input-2-bd89e64c1718> in <module>
----> 1 dimensions[0]=250

TypeError: 'tuple' object does not support item assignment

这会导致Python返回类型错误消息。由于试图修改元组的操作是被禁止的,因此Python指出不能给元组的元素赋值。

变量可变

虽然不能修改元组的元素,但可以给存储元组的变量赋值。因此,如果要修改前述矩形的尺寸,可重新定义整个元组。

dimensions=(250,100)		#可以重新为变量赋值,创建一个新的元组
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值