天天看点

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]
           

字符串

赋值问题

字符串是不可变对象,不要试图用下标的方法去改变字符串的值。

+是字符串连接运算符,*是重复操作,**表示乘方运算:

例子:

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]
           

str()

str()函数可以将非字符串值表示成字符串:

age=23
message="Happy "+str(age)+"rd Birthday"+"!"*4
print(message)
           

输出:

删除元素

  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. 利用索引

    删除指定前几个或后几个元素,可以通过索引完成

字典

python中字典是键-值对。

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

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

注意: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. 末尾添加元素
  1. 插入元素(通过指定下标)
  1. 删除元素
#使用del,前提是知道要删除元素的索引
del motorcycles[0]

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

#使用remove,根据值删除元素,但是注意只能删除第一个值,如果该值重复出现要用循环删除
motorcycles.remove('ducati')
           

习题

给定一个罗马数字,将其转换成整数。输入确保在 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)		#可以重新为变量赋值,创建一个新的元组
           

继续阅读