关于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
  • 分片表达式

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,019评论 3 119
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,047评论 2 89
  • 雨 肆无忌惮,忘记了约定 浑浑沉沉了天地 我倔强的张开双臂 可是有气无力 雨 隔断了悠长的雨巷 油纸伞只能无力的张...
    唐春元ok阅读 162评论 16 16
  • -01- 今天是10号,发工资的日子,你比往常上班的积极性高了那么一点,不是因为你想着这笔钱可以如何规划使用,...
    一个芍子呀阅读 348评论 0 0