鱼C论坛

 找回密码
 立即注册
查看: 969|回复: 4

[已解决]关于python最新版25讲问答题4的疑惑

[复制链接]
发表于 2021-9-5 17:44:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 一阵三十六 于 2021-9-7 22:53 编辑

要求是:
请将下面 matrix 矩阵反向展开,即使得最终的结果为 [9, 8, 7, 6, 5, 4, 3, 2, 1]。
matrix = [[1, 2, 3],
           [4, 5, 6],
           [7, 8, 9]]
给的参考答案是:
>>> flatten = [col for row in matrix for col in row][::-1]
>>> flatten
[9, 8, 7, 6, 5, 4, 3, 2, 1]

然后我试着用 for循环 套一下这个答案。
无标题.png
为什么这两个得到的结果不一样呢?
而且按我自己不成熟的理解我认为也是循环的那个结果。
希望大佬讲一下这个答案的逻辑和我思考方式的误区。
最佳答案
2021-9-5 19:39:32
本帖最后由 傻眼貓咪 于 2021-9-5 20:09 编辑
一阵三十六 发表于 2021-9-5 18:48
你好,我明白了你的思路。
但我想问得是:
在参考答案


思路相同,只是參考答案是先取值後排序,如:
步驟 1:
取得所有值 [1, 2, 3, 4, 5, 6, 7, 8, 9]
步驟 2:
再倒過來 [9, 8, 7, 6, 5, 4, 3, 2, 1]
# 注:[::-1] 就是前後對調,如:[1, 2, 3, 4][::-1] -> [4, 3, 2, 1]

而我是先排序後取值

[::] 這是很好用的操作符
不單只是用在列表,所有只要能索引訪問的表,都能用這個符,如下:
能用:列表(list),元組(tuple),字符串(string)
不能用:集合(set),字典(dictionary)

含義與用法,如下:
[::] = [開始 : 結束 : 自定訪問方式]
開始:表示第一個被訪問的值的索引(index)位置,默認為 0
結束:表示最後一個被訪問的值的索引(index)位置,默認為最後一個位置+1(注:不包括結束位置本身)
自定訪問方式:正整數為從前面開始訪問,負整數為從後面開始訪問,數字表示下一個位置是現在的位置後面第幾位,默認為 1,如:[1, 2, 3, 4, 5, 6][::2] = [1, 3, 5](注:1 後第二位是 3,3後第二位是5)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-5 18:01:48 | 显示全部楼层

回帖奖励 +10 鱼币

本帖最后由 傻眼貓咪 于 2021-9-5 18:10 编辑
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]]

res = [j for i in matrix[::-1] for j in i[::-1]] # 這裡有 2 個循環

print(res)

# 先從 matrix 最後一個元素 [7, 8, 9] 作循環
# 再從元素裡面最後的數字以逆方式作循環輸出 9 -> 8 -> 7
[9, 8, 7, 6, 5, 4, 3, 2, 1]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-5 18:48:26 | 显示全部楼层

你好,我明白了你的思路。
但我想问得是:
在参考答案
flatten = [col for row in matrix for col in row][::-1]
中,
第一步 row = [1,2,3]
col 依次取 3,2,1
第二步 row = [4,5,6]
col 依次取 6,5,4
第三步 row = [7,8,9]
col 依次取9,8,7
那么得到的列表为什么是
[9,8,7,6,5,4,3,2,1]
而不是[3,2,1,6,5,4,9,8,7]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-5 19:39:32 | 显示全部楼层    本楼为最佳答案   
本帖最后由 傻眼貓咪 于 2021-9-5 20:09 编辑
一阵三十六 发表于 2021-9-5 18:48
你好,我明白了你的思路。
但我想问得是:
在参考答案


思路相同,只是參考答案是先取值後排序,如:
步驟 1:
取得所有值 [1, 2, 3, 4, 5, 6, 7, 8, 9]
步驟 2:
再倒過來 [9, 8, 7, 6, 5, 4, 3, 2, 1]
# 注:[::-1] 就是前後對調,如:[1, 2, 3, 4][::-1] -> [4, 3, 2, 1]

而我是先排序後取值

[::] 這是很好用的操作符
不單只是用在列表,所有只要能索引訪問的表,都能用這個符,如下:
能用:列表(list),元組(tuple),字符串(string)
不能用:集合(set),字典(dictionary)

含義與用法,如下:
[::] = [開始 : 結束 : 自定訪問方式]
開始:表示第一個被訪問的值的索引(index)位置,默認為 0
結束:表示最後一個被訪問的值的索引(index)位置,默認為最後一個位置+1(注:不包括結束位置本身)
自定訪問方式:正整數為從前面開始訪問,負整數為從後面開始訪問,數字表示下一個位置是現在的位置後面第幾位,默認為 1,如:[1, 2, 3, 4, 5, 6][::2] = [1, 3, 5](注:1 後第二位是 3,3後第二位是5)

评分

参与人数 1鱼币 +5 收起 理由
一阵三十六 + 5 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-5 20:52:21 | 显示全部楼层
傻眼貓咪 发表于 2021-9-5 19:39
思路相同,只是參考答案是先取值後排序,如:
步驟 1:
取得所有值 [1, 2, 3, 4, 5, 6, 7, 8, 9]

谢谢,我现在才看见那个[::-1]在最外面。感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 10:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表