python 列表解析,求解答

已知一个列表[1,2,3,4,5,6]

要求能被三整除的保留不能被3整除的则乘以2.

结果[2,4,3,8,10,6]

使用列表解析完成。

list1=[1,2,3,4,5,6]

a=[i if i%3==0 else i*2 for i in list1  ]

另外,如果列表解析中还想嵌套列表解析可以吗,我发现形式会变成

[xxx,[xxx,xxx]]

列表解析目前给我的感觉是,可以处理逻辑上不是很复杂的for循环,如果层次多余3层,似乎不太合适。

阅读 3k
4 个回答
list1 = [1,2,3,4,5,6]
a = [i if i%3 == 0 else i*2 for i in list1]
print a
[ i if (i % 3 == 0) else (i * 2) for i in l]

这里要的不是 过滤 ,而是 格式化 。即,“能被 3 整除的原样输出,否则乘以 2 输出”。

[i if i%3==0 else i*2 for i in l]

简单粗暴

最好的方式是定义一个函数, 简单的才是最好的

列表表达式

  1. 最多 2 个 for
  2. 最多 2 个 if 判断
  3. 不适合写很复杂的逻辑 (定义成函数更好)

总而言之, 列表表达式适合「这个逻辑很简单, 写成一个函数太小题大做了,要是能随手写出来就好了. 而且我能确保: 以后我还能一眼看懂这里的逻辑, 也能确保别人能一眼看懂这里的逻辑」

def _handle_number(number):
    """处理函数

    :type number: int
    :param number:
    :rtype: int
    :return:
    """

    if number % 3  == 0:
        return number
    else:
        return number * 2

handled_list = map(_handle_number, mylist)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题