在Python中,有列表解析和类似的Map和集合结构,而在Kotlin中,任何文档中都没有类似的名称。
这些解析的等价物是什么?例如,在Python 3 Patterns, Recipes and Idioms中找到的那些解析。它包括对以下内容的解析:
- 列表
- 设定
- 辞典
***注:***此问题是作者有意编写和回答的(Self-Answered Questions),因此,SO中会提供Kotlin常见主题的惯用答案。
在Python中,有列表解析和类似的Map和集合结构,而在Kotlin中,任何文档中都没有类似的名称。
这些解析的等价物是什么?例如,在Python 3 Patterns, Recipes and Idioms中找到的那些解析。它包括对以下内容的解析:
4条答案
按热度按时间cl25kdpy1#
以Python 3 Patterns, Recipes and Idioms为例,我们可以使用一个简单的模式将其转换为Kotlin。
1.输出表达式
1.输入列表/序列和变量
1.任选 predicate
这些直接关联到集合类的Kotlin函数扩展。输入序列,后面是
filter
lambda中的可选 predicate ,后面是map
lambda中的输出表达式。因此,对于这个Python示例:变成
注意,在Kotlin版本中不需要变量,因为隐含的
it
变量在每个lambda中使用。在Python中,你可以通过使用()
而不是方括号,将这些变量变成一个惰性生成器:在Kotlin中,通过函数调用
asSequence()
改变输入,可以更明显地将其转换为惰性序列:Kotlin中的嵌套解析是通过将一个解析嵌套在另一个解析的
map
lambda中来创建的。例如,以Python中PythonCourse.eu的示例为例,该示例稍作修改,使用了集合解析和列表解析:变成:
注意,嵌套解析产生了一个列表列表,它使用
flatMap()
转换为一个平面列表,然后使用toSet()
转换为一个集合。另外,Kotlin范围是包含的,而Python范围是不包含的,所以你会看到范围中的数字略有不同。您也可以在Kotlin中使用
sequence
生成器和协同例程来生成值,而无需调用flatMap()
或flatten()
:引用的Python页面中的另一个示例是生成矩阵:
在Kotlin:
或者在Kotlin中,你也可以生成数组,而不是列表:
集合解析的另一个例子是生成一组唯一的正确大小写的名称:
翻译为Kotlin:
而这个例子对于Map理解来说有点古怪,但在Kotlin.原文中也可以实现:
而转换后的,这里写得更“罗嗦”一点,以便更清楚地说明正在发生的事情:
进一步阅读:
5uzkadbs2#
仅就练习而言,最接近python的将是:
7bsow1i63#
相当于以下Python代码
fcg9iug34#
Map理解
如果键是源列表的未转换元素,则更简单: