数据处理利器python与scala基本数据结构对比分析-大数据ML样本集案例实战

栏目: Python · 发布时间: 5年前

内容简介:版权声明:本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。QQ邮箱地址:1120746959@qq.com,如有任何学术交流,可随时联系。

版权声明:本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。QQ邮箱地址:1120746959@qq.com,如有任何学术交流,可随时联系。

1 python 与scala对比

1.1 scala 数据结构

  • List 案例

    val l = List(1, 1, 2, 2, 3, 5)
     
     List元素的追加
     val list2 = list1 :+ 99
     println(list2)
     val list3 = 100 +: list1
     
     List的创建与追加,符号“::”,注意观察去掉Nil和不去掉Nil的区别
     scala> val list4 = 1 :: 2 :: 3 :: list1
     list4: List[Int] = List(1, 2, 3, 1, 2)
     
     scala> val list5 = 1 :: 2 :: 3 :: list1 :: Nil
     list5: List[Any] = List(1, 2, 3, List(1, 2))
     
     //map操作
     scala> l.map(_ * 2)
     res0: List[Int] = List(2, 4, 6, 8, 10)
     
     //filter操作
     scala> l.filter(_ > 2)
     res3: List[Int] = List(3, 4, 5)
     
     //collect操作
     scala> l.collect {case i if i > 2 => i * 2}
     res1: List[Int] = List(6, 8, 10)
     
     //定义一个列表
     scala> val l = List(List(1, 2, 3), List(4, 5, 6), Seq(7, 8, 9))
     l: List[Seq[Int]] = List(List(1, 2, 3), List(4, 5, 6), List(7, 8, 9))
     
     //flatten操作
     scala> l.flatten
     res5: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)
     
     //flatMap操作
     scala> l.flatMap(i => i.map(_ * 2))
     res6: List[Int] = List(2, 4, 6, 8, 10, 12, 14, 16, 18)
     
     case class Student(
       name: String,
       age: Int,
       sex: String
     )
     val jilen = Student(
       name = "Jilen",
       age = 30,
       sex = "m"
     )
     val shaw = Student(
       name = "Shaw",
       age = 18,
       sex = "m"
     )
     val yison = Student(
       name = "Yison",
       age = 40,
       sex = "f"
     )
     val l = List(jilen, shaw, yison)
     l: List[Student] = List(Student(Jilen,30,m), Student(Shaw,18,m), Student(Yison,40,f))
     
     val nameList = l.map(_.name)
     nameList: List[String] = List(Jilen, Shaw, Yison)
     
     val maleList = l.filter(_.sex == "m")
     maleList: List[Student] = List(Student(Jilen,30,m), Student(Shaw,18,m))
     
     l.zipWithIndex
     List[(Student, Int)] = List((Student(Jilen,30,m),0), (Student(Shaw,18,m),1),(Student(Yison,40,f),2))
    
     
     val group = l.groupBy(_.sex)
     group: scala.collection.immutable.Map[String,List[Student]] = Map(m -> List(Student(Jilen,30,m), Student(Shaw,18,m)), f -> List(Student(Yison,40,f)))
    复制代码
  • Array结构

    定义
      val arr1 = new Array[Int](10)
      //赋值
      arr1(1) = 7
      或:
      //定义
      val arr1 = Array(1, 2)
      //定义
      val arr2 = ArrayBuffer[Int]()
      //追加值
      arr2.append(7)
      //重新赋值
      arr2(0) = 7
      
      定长数组与变长数组的转换
      arr1.toBuffer
      arr2.toArray
      
      多维数组
      //定义
      val arr3 = Array.ofDim[Double](3,4)
      //赋值
      arr3(1)(1) = 11.11
      
      Scala数组转 Java 数组
      import scala.collection.JavaConversions.bufferAsJavaList
      val javaArr = new ProcessBuilder(arr4)
      println(javaArr.command())
      
      import scala.collection.JavaConversions.asScalaBuffer
      import scala.collection.mutable.Buffer
      val scalaArr: Buffer[String] = javaArr.command()
      println(scalaArr)
      
      for(x <- arr1) {
           println(x)
      }
    复制代码
  • 元组 Tuple

    元组的创建
      val tuple1 = (1, 2, 3, "heiheihei")
      println(tuple1)
      
      元组数据的访问,注意元组元素的访问有下划线,并且访问下标从1开始,而不是0
      val value1 = tuple1._4
      println(value1)
      
      元组的遍历
      for (elem <- tuple1.productIterator) {
           print(elem)
      }
      
      tuple1.productIterator.foreach(i => println(i))
      tuple1.productIterator.foreach(print(_))
    复制代码
  • 映射 Map

    构造不可变映射
      val map1 = Map("Alice" -> 10, "Bob" -> 20, "Kotlin" -> 30)
      
      构造可变映射
      val map2 = scala.collection.mutable.Map("Alice" -> 10, "Bob" -> 20, "Kotlin" -> 30)
      
      对偶元组 
      val map4 = Map(("Alice", 10), ("Bob", 20), ("Kotlin", 30))
      
      取值
      如果映射中没有值,则会抛出异常,使用contains方法检查是否存在key。如果通过 映射.get(键) 这样的调用返回一个Option对象,要么是Some,要么是None。
      val value1 = map1("Alice")//建议使用get方法得到map中的元素
      println(value1)
      scala> map1.get("Alice")
      res1: Option[Int] = Some(10)
      
      更新值
      map2("Alice") = 99
      println(map2("Alice"))
      或:
      map2 += ("Bob" -> 99)
      map2 -= ("Alice", "Kotlin")
      println(map2)
      或:
      val map5 = map2 + ("AAA" -> 10, "BBB" -> 20)
      println(map5)
      
      遍历
      for ((k, v) <- map1) println(k + " is mapped to " + v)
      for (v <- map1.keys) println(v)
      for (v <- map1.values) println(v)
      for(v <- map1) prinln(v)
    复制代码
  • Set集合

    集是不重复元素的结合。集不保留顺序,默认是以哈希集实现。
      
      Set不可变集合的创建
      val set = Set(1, 2, 3)
      println(set)
      
      Set可变集合的创建,如果import了可变集合,那么后续使用默认也是可变集合
      import scala.collection.mutable.Set
      val mutableSet = Set(1, 2, 3)
      
      可变集合的元素添加
      mutableSet.add(4)
      mutableSet += 6
      
      注意该方法返回一个新的Set集合,而非在原有的基础上进行添加
      mutableSet.+(5)//该方法相当于 “:+” 这个方法
      
      可变集合的元素删除
      mutableSet -= 1
      mutableSet.remove(2)
      println(mutableSet)
      
      for(x <- mutableSet) {
           println(x)
      }
    复制代码
  • 迭代器

    val iterator = List(1, 2, 3, 4, 5).iterator
      while (iterator.hasNext) {
        println(iterator.next())
      }
      或:
      for(enum <- iterator) {
        println(enum)
      }
    复制代码

1.2 python 数据结构

  • List 案例

    list1=['两点水','twowter','liangdianshui',123]
          # 通过索引来访问列表
          print(list1[2])
          # 通过方括号的形式来截取列表中的数据
          print(list1[0:2])
          # 通过索引对列表的数据项进行修改或更新
          list1[2]=456
          print(list1)
          # 使用 append() 方法来添加列表项
          list1.append('hello');
          print(list1)
          list1=['两点水','twowter','liangdianshui',123]
          print(list1)
          # 使用 del 语句来删除列表的的元素
          del list1[3]
          print(list1)
          
          函数&方法	            描述
          cmp(list1, list2)	比较两个列表的元素
          len(list)	列表元素个数
          max(list)	返回列表元素最大值
          min(list)	返回列表元素最小值
          list(seq)	将元组转换为列表
          list.append(obj)	在列表末尾添加新的对象
          list.count(obj)	统计某个元素在列表中出现的次数
          list.extend(seq)	在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
          list.index(obj)	从列表中找出某个值第一个匹配项的索引位置
          list.insert(index, obj)	将对象插入列表
          list.pop(obj=list[-1])	移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
          list.reverse()	反向列表中元素
          list.sort([func])	对原列表进行排序  
    复制代码
  • Tuple元祖(两种创建,不可变)

    tuple1=('两点水','twowter','liangdianshui',123,456)
      tuple2='两点水','twowter','liangdianshui',123,456   
      元组中只包含一个元素时,需要在元素后面添加逗号
      tuple4=(123,)
      print(tuple1[1])
      print(tuple2[0])
    复制代码
数据处理利器python与scala基本数据结构对比分析-大数据ML样本集案例实战
#-*-coding:utf-8-*-
    list1=[123,456]
    tuple1=('两点水','twowater','liangdianshui',list1)
    print(tuple1)
    list1[0]=789
    list1[1]=100
    print(tuple1)

    ('两点水', 'twowater', 'liangdianshui', [123, 456])
    ('两点水', 'twowater', 'liangdianshui', [789, 100])
    
    tuple1=('两点水','twowter','liangdianshui',[123,456])
    print(tuple1)
    del tuple1
复制代码
  • dict (字典,可变容器模型,且可存储任意类型对象)

    #-*-coding:utf-8-*-
      dict1={'liangdianshui':'111111' ,'twowater':'222222' ,'两点水':'333333'}
      print(dict1)
      # 新增一个键值对
      dict1['jack']='444444'
      print(dict1)
      # 修改键值对
      dict1['liangdianshui']='555555'
      print(dict1)
      
      {'liangdianshui': '111111', 'twowater': '222222', '两点水': '333333'}
      {'liangdianshui': '111111', 'twowater': '222222', '两点水': '333333', 'jack': '444444'}
      {'liangdianshui': '555555', 'twowater': '222222', '两点水': '333333', 'jack': '444444'}
      
      #-*-coding:utf-8-*-
      dict1={'liangdianshui':'111111' ,'twowater':'222222' ,'两点水':'333333'}
      print(dict1)
      # 通过 key 值,删除对应的元素
      del dict1['twowater']
      print(dict1)
      # 删除字典中的所有元素
      dict1.clear()
      print(dict1)
      # 删除字典
      del dict1
    复制代码
  • set 无序不重复元素集

    set1=set([123,456,789,123,123])
      print(set1)
    复制代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python高性能编程

Python高性能编程

【美】 戈雷利克 (Micha Gorelick)、【美】 欧日沃尔德(Ian Ozsvald) / 人民邮电出版社 / 2017-7-1 / 79

本书共有12章,围绕如何进行代码优化和加快实际应用的运行速度进行详细讲解。本书主要包含以下主题:计算机内部结构的背景知识、列表和元组、字典和集合、迭代器和生成器、矩阵和矢量计算、并发、集群和工作队列等。最后,通过一系列真实案例展现了在应用场景中需要注意的问题。 本书适合初级和中级Python程序员、有一定Python语言基础想要得到进阶和提高的读者阅读。一起来看看 《Python高性能编程》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具