Task 04 列表及相关操作
容器器数据类型,有以下四种。
列表<class 'list'>
元组<class 'tuple'>
字典<class 'dict'>
集合<class 'set'>
字符串<class 'str'>
这里有必要扩展一下python中的容器。
容器:
容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用in, not
in关键字判断元素是否包含在容器中。
这里的容器于我们常理解的Docker 容器或者Ananconda的区别。
容器是一种可以包含其他类型对象(如列表、元组、字典等)作为元素的对象; 容器仅仅只是用来存放数据的,我们平常看到的 l =
[1,2,3,4]等等,好像我们可以直接从列表这个容器中取出元素,但事实上容器并不提供这种能力,而是可迭代对象赋予了容器这种能力。
----我们可以理解容器是一个对象,(可见Python这种面向对象的思想融合于每个角落),所以列表的对象的后面可以有很多的方法。如list.apped, list.pop…
这里提到的另外一个关键词“可迭代”“。
以下图为例。list.extend()方法,如果直接list.extend(15),即尝试把数字15插入到列表的后面会报的错误。错误提示是, 数字15‘不是可迭代对象。
如果把list.extend([15])加上方括号,此时的输出就正常。即我们插入的列表是一个可迭代对象。关于迭代,可迭代对象,迭代器,推荐下面的这篇文章。关于迭代,可迭代对象,迭代器的基础概念
关于深拷贝与浅拷贝,我从一个西瓜得故事来解释。
举一个例子,一天,A看见B家里有一大箩筐西瓜。A嘴馋得十分想吃,于是问:B哥,能把你家西瓜全部给我吗?(我们假定A拿走西瓜后,B会有另外一筐完全一样的西瓜)
B哥考虑了一会儿,他有2种回答方式:
深拷贝式回答:可以呀,你回家去拿个箩筐来装就是了。西瓜可以给你,但是筐得留着,只要筐在,西瓜就在。 心安啦。
浅拷贝式回答:可以呀,西瓜就在这里,你想吃得时候来拿吧,我把我家地址给你。说完,A转身就去办正事儿了。看A走了以后,B哥心想,让A知道了,岂不自己能吃得就少了。所以B哥就一顿狂吃,只剩下了一个。过会儿,A来了,一看只有一个了。骂骂咧咧的把剩下的瓜吃完了。他俩从此断交。
l列表任务打卡。
import numpy as np
import time
start =time.time()
temp = [2, 3, 4, 5, 3, 2,3]
if len(temp) < 3:
print('your input is less than 3 elem, and please input again!!')
max = np.max(temp)
max_index = temp.index(max)
left_temp = temp[:max_index]
Right_temp = temp[max_index+1:len(temp)]
for i in range(max_index+1):
if i==0:
continue
else:
if i == max_index:
print('True')
break
if left_temp[i] > left_temp[i-1]:
continue
else:
print('False')
break
for i in range(len(Right_temp)):
if len(Right_temp) == 1:
print('True')
break
if Right_temp[i-1] > Right_temp[i-2]:
print('False')
break
else:
Right_temp.pop()
在学习的元组的相关的操作符的时候**+** 可以将俩个元组首尾拼接。其实列表也是可以的。
A = [1,2]
B= [3,4]
print(A+B) # [1, 2, 3, 4]
C = (2,3)
D = ('d','e')
print(C+D) # (2, 3, 'd', 'e')
Python 之拆包理解: 把元组、列表、字典里面的数据取出来分别赋值给占位符或者变量。
##### 对列表进行拆包
my_list = [1, 3.14, "hello", True]
num, pi, my_str, my_bool = my_list
# 或者
num, pi, my_str, my_bool = [1, 3.14, "hello", True]
### 对元组进行拆包
my_tuple = (1, 3.14, "hello", True)
num, pi, my_str, my_bool = my_tuple
### 对字典进行拆包
my_dict = {"name":"老王", "age": 19}
ret1, ret2 = my_dict
# 得到的是key 字典是无序的
print(ret1, ret2)
a, b = 1, 2 ##**这里是属于用拆包的形式定义变量。**
Python 中还有一种装包与拆包的过程。此过程类似于C++语言中形参传递的传址(arg,kwargs)与传值(*args, **kwargs)。
def run(a,*args):
print(a) #第一个参数传给了a
print(args) # args是一个元组,里面是2和3两个参数, # (2, 3)
print("对args拆包:", end=' ') # *args是将这个元组中的元素依次取出来 # 2 3
print(*args)
run(1,2,3)
任务 打卡:::
stringres = ' 122'
numesrr =['1','2']
for i in range(len(stringres)):
temp = stringres[i]
if temp not in numesrr:
print('false')
关于 回文字符得查找。
string_input = 'babadefghhijkkjihh'
max_num = 0
max_str = ''
for i in range(1, len(string_input) - 1):
if len(string_input) - i < max_num:
break
j = 1
offset_L= 0
offset_R = 0
if string_input[i] == string_input[i - 1]:
offset_L = -1
elif string_input[i] == string_input[i + 1]:
offset_R = 1
while True:
try:
if (i-j) < 0 or (i+j) > len(string_input):
break
if string_input[i - j+ offset_L] == string_input[i + j+offset_R]:
max_str = string_input[i- j+offset_L: i +j + 1+offset_R]
max_num = len(max_str)
j += 1
else:
break
except Exception:
break
print(max_num)
print(max_str)