为了账号安全,请及时绑定邮箱和手机立即绑定

关于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


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消