小甲鱼第十一课:列表:一个“打了激素”的数组3总结反思

1. 请问如何将下边这个列表的’小甲鱼’修改为’小鱿鱼’?
list1 = [1, [1, 2, [‘小甲鱼’]], 3, 5, 8, 13, 18]

#自己做的时候想了很久,也没找到很好的提取第三层修改的方法,所以用了个很基础的方法:
list1 = [1, [1, 2, ['小甲鱼']], 3, 5, 8, 13, 18]
list1.pop(1)
list2 = [1, 2, ['小鱿鱼']]
list1.insert(1,list2)
print(list1)
实际答案:    list1[1][2][0] = '小鱿鱼'              

解释list1[1][2][0] = ‘小鱿鱼’
相当于list1[1]=[1, 2, [‘小甲鱼’]]
list1[1][2]=[‘小甲鱼’]
这个列表当中只有一个小甲鱼的字符串为0位
所以 list1[1][2][0]=小甲鱼
再将其直接用其他代替

PS:你有听说过列表推导式或列表解析吗?
没听过?!没关系,我们现场来学习一下吧,看表达式:

[ i*i for i in range(10) ]
你觉得会打印什么内容?

[ i*i for i in range(10) ]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

居然分别打印了0到9各个数的平方,然后还放在列表里边了有木有?!
列表推导式(List comprehensions)也叫列表解析,灵感取自函数式编程语言 Haskell。Ta 是一个非常有用和灵活的工具,可以用来动态的创建列表,语法如:
[有关A的表达式 for A in B]
例如:

list1 = [x**2 for x in range(10)]
list1
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

相当于

list1 = []
for x in range(10):
list1.append(x**2)

作者:无罪的坏人
链接:https://www.jianshu.com/p/1c467e595507
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2.问题:请先在 IDLE 中获得下边列表的结果,并按照上方例子把列表推导式还原出来。
list1 = [(x, y) for x in range(10) for y in range(10) if x%2==0 if y%2!=0]

自己的答案:
list1 = []
#定义一个列表
for x in range(10):
    if x%2 == 0:
        for y in range(10):
               if y%2 != 0:
                   list1.extend([(x,y)])
    else:
        continue

print(list1)
标准答案:
list1 = []
for x in range(10):
    for y in range(10):
        if x % 2 == 0:
            if y % 2 != 0:
                list1.append((x, y))
                #这里要用进入列表的append,而不是直接print,这样不会输出列表

##双for循环,优先将第二层循环结束后再继续第一层

. 3.活学活用:请使用列表推导式补充被小甲鱼不小心涂掉的部分

list1 = ['1.Jost do It','2.一切皆有可能','3.让变成改变世界','4.Impossible is nothing']
list2 = ['4.阿迪达斯','2.李宁','3.鱼C工作室','1.耐克']
list3 = [XXXXXXXXX]
print(list3)
for each in list3:
    print(each)

1.耐克:Jost do It
2.李宁:一切皆有可能
3.鱼C工作室:让变成改变世界
4.阿迪达斯:Impossible is nothing
list1 = ['1.Jost do It','2.一切皆有可能','3.让变成改变世界','4.Impossible is nothing']
list2 = ['4.阿迪达斯','2.李宁','3.鱼C工作室','1.耐克']
展开程序:
list3=[]
for app in list1:
    for bdd in list2:
        if app[0] == bdd[0]:
            print(bdd+':'+ app[2:])
            #这里和上题对比,就没有进入列表
            
组合程序:
list3=[(bdd+':'+ app[2:]) for app in list1 for bdd in list2 if app[0] == bdd[0]]
#####注意!1.开头的一定就是要输入进列表的程序
2.每个逻辑语句按照出现顺序层层递进
3.list=[]一定记住是中括号
4.因为':'也是字符串,所以可以直接相加


最终程序:
list1 = ['1.Jost do It','2.一切皆有可能','3.让变成改变世界','4.Impossible is nothing']
list2 = ['4.阿迪达斯','2.李宁','3.鱼C工作室','1.耐克']
list3=[(bdd+':'+ app[2:]) for app in list1 for bdd in list2 if app[0] == bdd[0]]
print(list3)
for each in list3:
    print(each)

最终答案:
['1.耐克:Jost do It', '2.李宁:一切皆有可能', '3.鱼C工作室:让变成改变世界', '4.阿迪达斯:Impossible is nothing']
1.耐克:Jost do It
2.李宁:一切皆有可能
3.鱼C工作室:让变成改变世界
4.阿迪达斯:Impossible is nothing

总结:
1.列表的常用操作符:
比较:如果有多个元素,默认从第一个元素开始比较,比较对应的ASCII码值大小;
逻辑(and or):
连接(+):[1, 2, 3] + [4, 5, 6] 结果是 [1, 2, 3, 4, 5, 6]
重复(*):[‘Hi!’] * 4 结果是 [‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’]
成员关系(in 和 not in):3 in [1, 2, 3] 结果是 True

列表的方法:dir(list)
append():在列表末尾添加新的对象
extend():在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
count():统计出现的次数
index(目标,起始位置,截止位置):返回参数在列表中的位置
insert():将对象插入到列表指定位置
pop():移除列表中的一个元素(默认最后一个元素,可指定其他的位置),并且返回该元素的值
remove():移除列表中某个值的第一个匹配项(不能指定位置删除)
reverse():翻转列表
sort():按照指定的方式对列表成员排序,默认则从小到大排列
特别的:sort(reverse=True)表示从大到小,默认为False

列表的内置函数:
比较两个列表的元素:operator.eq(list1,list2)(前提需import operator)
计算列表元素个数:len(list1)
返回列表中元素最大值:max(list1)
返回列表中元素最小值:min(list1)
将元组转换为列表:list(tuple1)

作者:无罪的坏人
链接:https://www.jianshu.com/p/1c467e595507
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2.列表推导式:
A(要输入进列表的东西,且后面要对其进行处理) for A in 。。。。。

3.list[0][1][2]=“aaaaa”

相当于列表中第0元素中的第一个元素中的第二个元素,将其替换为aaaa

发布了17 篇原创文章 · 获赞 1 · 访问量 361

猜你喜欢

转载自blog.csdn.net/cccccccaaaaaaaaa/article/details/105228333