前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python和Scala的集合和映射

Python和Scala的集合和映射

作者头像
哒呵呵
发布2018-08-06 14:18:48
5800
发布2018-08-06 14:18:48
举报
文章被收录于专栏:鸿的学习笔记鸿的学习笔记

在入门系列的最后,让我们来看看基于hash表的两种常见的数据结构,集合和映射。在Scala里的集合和映射,这两种数据结构都有可变和不可变的两种版本,区别仅仅在于类的继承关系。而Python的集合也有可变和不可变两种,内置的字典则是只有一种,但是在types模块里有基于字典的MappingProxyType的不可变的只读视图。

集合

先从集合说起吧,集合的意义和数学上的集合论的集合是一样的,里面的值不存在重复,有着集合的交并集的操作。

1.集合的构造 Scala

代码语言:javascript
复制
scala> var set0 = Set(1,2,3,4,4)
set0: scala.collection.immutable.Set[Int] = Set(1, 2, 3, 4)

Python

代码语言:javascript
复制
set0 = {1,2,3,4,4}
set0
Out[9]: {1, 2, 3, 4}

从这里可以看出Scala默认的Set是不可变的集合。如果要做一个可变集,需要import。

代码语言:javascript
复制
scala> import scala.collection.mutable
import scala.collection.mutable

scala> val set1 = mutable.Set(1,2)
set1: scala.collection.mutable.Set[Int] = Set(1, 2)

而Python不需要import,它的不可变集合是内置的,使用的是frozenset。

代码语言:javascript
复制
frozenset({1,2,3,45})
Out[11]: frozenset({1, 2, 3, 45})

2.集合的求交集和并集 Scala

代码语言:javascript
复制
scala> val a = Set(1,2)
a: scala.collection.immutable.Set[Int] = Set(1, 2)

scala> val b = Set(1,2,3)
b: scala.collection.immutable.Set[Int] = Set(1, 2, 3)

scala> a|b
res2: scala.collection.immutable.Set[Int] = Set(1, 2, 3)

scala> a&b
res3: scala.collection.immutable.Set[Int] = Set(1, 2)

Python

代码语言:javascript
复制
a = {1,2}

b = {1,2,3}

a|b
Out[15]: {1, 2, 3}

a&b
Out[16]: {1, 2}

3.增添元素 Scala

代码语言:javascript
复制
scala> var set0 = Set(1,2,3,4,4)
set0: scala.collection.immutable.Set[Int] = Set(1, 2, 3, 4)

scala> set0 += 5

scala> set0
res4: scala.collection.immutable.Set[Int] = Set(5, 1, 2, 3, 4)

Python

代码语言:javascript
复制
set0 = {1,2,3,4,4}
set0.add(5)
set0
Out[19]: {1, 2, 3, 4, 5}

这里的set0实际上是重新赋值了,而不是原地添加,所以我们会使用var定义变量,而Python的集合是原地添加元素。

4.判断某个元素是否存在 Scala

代码语言:javascript
复制
scala> set0.contains(1)
res7: Boolean = true

Python

代码语言:javascript
复制
1 in set0
Out[20]: True

映射

Map这个实际上有很多的别名,在Scala里称为映射,而在Python则被称为字典,本质都是一样的基于Hash表的数据结构,能够快速的查找某个值。

1.构造 Scala

代码语言:javascript
复制
scala> val map1 = Map(1 -> "hello",2 -> "world")
map1: scala.collection.Map[Int,String] = Map(1 -> hello, 2 -> world)

scala> import scala.collection.mutable
import scala.collection.mutable

scala> val map0 = mutable.Map[Int, String](1 -> "hello",2 -> "world")
map0: scala.collection.mutable.Map[Int,String] = Map(2 -> world, 1 -> hello)

Python

代码语言:javascript
复制
dict0 = {1:"hello",2:"world"}
import types
dict1 = types.MappingProxyType(dict0)

我们可以注意到Scala的Map使用->作为分隔符,而Python使用了:(八卦下:这个符号通过Python,影响了js,进而成为了json的分隔符),Scala的默认版本是不可变的映射,而不是可变的映射,这也是Scala设计者对于函数式的不可变的推崇的体现吧

2.增添元素 初始化为空值

代码语言:javascript
复制
scala> val map0 = mutable.Map[Int, String]()
map0: scala.collection.mutable.Map[Int,String] = Map()

scala> map0 += (1 -> "hello")
res12: map0.type = Map(1 -> hello)

scala> map0 += (2 -> "world")
res13: map0.type = Map(2 -> world, 1 -> hello)

scala> map0
res15: scala.collection.mutable.Map[Int,String] = Map(2 -> world, 1 -> hello)

Python

代码语言:javascript
复制
dict0 = {}

dict0[1] = "hello"

dict0[2] = "world"

好了,入门系列就到此为止了,下一章我们就要深入类和对象了,开始真正的编程之旅了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-03-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 鸿的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 集合
  • 映射
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档