|
假如表达式包括元组(譬喻(x,y)),则必需用括号括起来。
- # Convert height from cms to feet using List Comprehension : 1 cm = 0.0328 feetheight_in_cms = [('Tom',183),('Daisy',171),('Margaret',179),('Michael',190),('Nick',165)]height_in_feet = [(height[0],round(height[1]*0.0328,1)) for height in height_in_cms]height_in_feet[('Tom', 6.0), ('Daisy', 5.6), ('Margaret', 5.9), ('Michael', 6.2), ('Nick', 5.4)]
嵌套列表理会式
列表理会式也可以嵌套以建设伟大的列表。譬喻,可以仅行使列表理会式来构建矩阵。
构建一个3x3的矩阵:
- matrix = [[j * j+i for j in range(3)] for i in range(3)]
- matrix[[0, 1, 4], [1, 2, 5], [2, 3, 6]]
荟萃理会式
荟萃理会式相同于列表理会式,但返回的是荟萃而不是列表。意义上来说语法略有差异,建设荟萃理会式用花括号而不是方括号。
思索包括以下人名的列表:
- names = [ 'Arnold', 'BILL', 'alice', 'arnold', 'MARY', 'J', 'BIll' ,'maRy']
该列表包括很多一再项,而且有的名字只有一个字母。今朝想要的是一个由长于一个字母且仅首字母大写的名字构成的列表。为了完成这项使命,回收了荟萃理会式。
- {name.capitalize() for name in names if len(name) > 1}{'Alice', 'Arnold', 'Bill', 'Mary'}
字典理会式 { }
当输入回收字典或键:值对的情势时,行使字典理会式。譬喻,思索这样一个字典,个中键暗示字符,值暗示这些字符呈此刻语料库中的次数。
- char_dict = {'A' : 4,'z': 2, 'D' : 8, 'a': 5, 'Z' : 10 }
字典char_dict由大写和小写字母构成。在此想要计较字母的总呈现次数,不管它们是大写照旧小写。本文行使字典理会式来实现这个方针:
- { k.lower() : char_dict.get(k.lower(), 0) + char_dict.get(k.upper(), 0) for k in char_dict.keys()}{'a': 9, 'z': 12, 'd': 8}
天生器理会式 ( )
列表理会是列表,由于天生器表达式是天生器。天生器函数从给定序列一次一个地输出值,而不是一次性所有输出。这是一篇很好的文章,它表明白Python中Generators的细节。
天生器理会式的语法和事变方法就像列表理会式一样,只不外它们行使圆括号而不是方括号。假假想要计较前十个天然数的平方和。
- # Sum of first ten natural numbers using List Comprehensionssum([num**2 for num in range(11)])
- 385
假如我们行使任何其他可迭代而不必然是列表,功效将是沟通的。
- sum({num**2 for num in range(11)})
- 385
此刻,假如行使天生器理会式来计较前十个天然数的平方,那么它将是这样的:
- squares = (num**2 for num in range(11))
- squaressquares
- <generator object <genexpr> at 0x1159536d8>
与列表理会式差异,天生器理会式不返回列表而是返回天生器工具。为了获得功效,可以行使上面的表达式和sum函数。
- sum(n ** 2 for n in numbers)
- 385
看看怎样挣脱上面表达式中的冗余括号,使代码更有用。
最后,不要太过行使理会式
列表理会式是镌汰代码长度的有用要领。它们还使代码更具可读性。但有些环境下不消它也能轻松地告竣目标。
当措施的逻辑太长时,不提议行使理会式。行使理会式的首要目标是收缩代码。可是,当开始将过多的代码打包到单个语句中时,倾向于捐躯代码的可读性。在这种环境下,for轮回是更优选择。 (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|