索引
从左到右索引默认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)
输出:
删除元素
-
使用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本身
-
利用索引
删除指定前几个或后几个元素,可以通过索引完成
字典
python中字典是键-值对。
每个键都和一个值相关联,可以使用键来访问与之关联的值。其中值可以是python中的任何对象,如:数字,字符串,列表乃至字典。
- 创建字典:
- 访问字典中的值(如键1的值):
- 添加键-值对:
alien={} #创建空字典
alien['color']='green'
alien['points']=5 #添加两个键-值对
print(alien)
- 删除键-值对
注意:del删除的是变量,而不是数据。del可以作用于某个对象,如字典、列表,也可以作用于对象中的某个元素。但是不可以用于字符串。
- 遍历
#遍历键-值对,需要声明两个变量用以存储键,值
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'] #创建列表
- 末尾添加元素
- 插入元素(通过指定下标)
- 删除元素
#使用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) #可以重新为变量赋值,创建一个新的元组