python列表解析式_关于python中分片表达式和列表解析式的使用

leetcode中有一道题,大意是将句子按照空格分割,然后每个分割成的字母反写,比如:Input: "Let's take LeetCode contest"Output: "s'teL ekat edoCteeL tsetnoc"

这道题思路很简单,1.分割 2.反写 3.返回

但是在具体写代码的时候,有一些技巧可以简化代码。def reverseWords(self, s):

"""

:type s: str

:rtype: str

"""

list = s.split(' ') for n,item in enumerate(list):

list[n] = ''.join(item[::-1]) return ' '.join(list)

这是我一开始写的代码,用了for循环,很常见的写法,一般用到这种迭代结构,很容易想到循环语句。其中,反写,用了[::-1]这种分片表达式的写法。

for循环很常见,但是如果有2层,甚至3层的时候,很容易把自己都搞糊涂了。比如leetcode821题https://www.jianshu.com/p/20c0423a9e8a我的这篇文章中的第一种写法,用了2层for循环,很容易看的混乱。

这时候,用列表解析式就更简单,不容易混乱。列表解释式列表解析式是python中的一个亮点语法。本质上就是用列表来构建列表,通过对已有列表中的每一项应用一个指定的表达式来构建出一个新的列表。列表解析式的优势是编码简单,运行起来很快。列表解析式的三个核心要素是:

1.作用于输入序列的运算表达式;

2.对输入序列的循环表达式;

3.对输入序列的过滤条件,其中过滤条件是可选的。

比如我们想要用列表a生成列表b,其中列表b中的每个元素都是a中对应元素的二次方

代码片段:a = [1,2,3,4,5,6,7,8,9,10]

b = [x**2 for x in a]print(b)

运行结果:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

所以,开头这道题,可以简化的写法:list_c = [] for index, item in enumerate(S): if C == item:

list_c.append(index)

list_return = [] for index, item in enumerate(S):

distance = [abs(index - index_list) for index_list in list_c]

list_return.append(min(distance)) return list_return分片表达式

那就简单了,很容易理解,不过要注意的是,分片表达式是产生一个全新的列表。

作者:fred_33c7

链接:https://www.jianshu.com/p/735677b01ab8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值