代码之家  ›  专栏  ›  技术社区  ›  Julia Learner anothershrubery

Julia中的Python样式列表

  •  0
  • Julia Learner anothershrubery  · 技术社区  · 7 年前

    下面的代码与我在Julia中对Python样式列表的预期一样:

    julia> list1 = [Any, 123]
    2-element Array{Any,1}:
        Any
     123
    
    julia> list1[1] = "ABC"
    "ABC"
    
    julia> list1
    2-element Array{Any,1}:
        "ABC"
     123
    

    但是,该代码没有:

    julia> list2 = [Any]
    1-element Array{DataType,1}:
     Any
    
    julia> list2[1] = "ABC"
    ERROR: MethodError: Cannot `convert` an object of type String to an object of type DataType
    

    julia> list1 = [Any, 123]
    # and
    julia> list2 = [Any]
    

    所以我试着用 any 而不是 Any

    julia> list3 = [any, 123]
    2-element Array{Any,1}:
        any
     123
    
    julia> list3[1] = "ABC"
    "ABC"
    
    julia> list3
    2-element Array{Any,1}:
        "ABC"
     123
    

    这一切都奏效了,但我试着:

    julia> list4 = [any]
    1-element Array{typeof(any),1}:
     any
    
    julia> list4[1] = "ABC"
    ERROR: MethodError: Cannot `convert` an object of type String to an object of type typeof(any)
    

    list = [Any] [any] 产生错误消息,如上图所示,但是如果在“list”创建时添加了另一个类型,情况会正常吗?

    编辑

    julia> pylist = Array{Any}(nothing, 5)
    5-element Array{Any,1}:
     nothing
     nothing
     nothing
     nothing
     nothing
    
    julia> pylist[1] = 123
    123
    
    julia> pylist[2] = 3.14
    3.14
    
    julia> pylist[3] = "ABC"
    "ABC"
    
    julia> pylist[4] = BigInt(12345)
    12345
    
    julia> pylist[5] = BigFloat(123.456)
    1.234560000000000030695446184836328029632568359375e+02
    

    这是另一个例子,但我在朱莉娅身边的时间还不够长,不知道这算不算“朱利安”。感谢Julia专家的任何意见:

    julia> PyList(n) = Array{Any}(nothing, n)
    PyList (generic function with 1 method)
    

    julia> Vector{Any}(nothing, 3)
    3-element Array{Any,1}:
     nothing
     nothing
     nothing
    
    julia> Vector{Any}(nothing, 3) == Array{Any}(nothing, 3)
    true
    

    因此 Vector{Any} Array{Any} . 下面是一些使用 PyList

    julia> pylst = PyList(3)
    3-element Array{Any,1}:
     nothing
     nothing
     nothing
    
    julia> pylst[1] = "ABC"
    "ABC"  
    julia> pylst[2] = 123
    123
    julia> pylst[3] = 3.14
    3.14
    julia> pylst
    3-element Array{Any,1}:
        "ABC"
     123
       3.14
    
    2 回复  |  直到 7 年前
        1
  •  5
  •   user2357112    7 年前

    [Any, 123]

    [Any] 意思是“用任意一个元素组成一个数组”。元素类型推断为 DataType

    如果要显式创建元素类型Any的数组,可以将类型放在文本前面。例如,元素类型的数组 Any 带单个元件 nothing :

    arr = Any[nothing]
    

    还有一些方法可以创建指定大小的数组,例如

    # 2x3 array of Any, all elements initialized to nothing
    arr = Array{Any}(nothing, 2, 3)
    
        2
  •  3
  •   HarmonicaMuse    7 年前

    Python列表接受任何类型的元素,并且不是固定大小的,因此 Vector{Any} Any[] (注释为Python格式):

    julia> x = Any[]        # >>> x = []
    0-element Array{Any,1}  # >>> x
                            # []
    
    julia> push!(x, 1)       # >>> x.append(1)
    1-element Array{Any,1}:  # >>> x
     1                       # [1]
    
    julia> push!(x, "2")     # >>> x.append("2")
    2-element Array{Any,1}:  # >>> x
     1                       # [1, '2']
      "2"
    

    Any Julia推断下一个数组是 Vector{Int} ,所以你不能推或改变它的位置 Int

    julia> y = Any[i^2 for i in 1:3]  # >>> y = [i**2 for i in range(1, 4)]
    3-element Array{Any,1}:           # >>> y
     1                                # [1, 4, 9]
     4
     9
    
    julia> push!(y, "16")    # >>> y.append("16")
    4-element Array{Any,1}:  # >>> y
     1                       # [1, 4, 9, '16']
     4
     9
      "16"
    

    您可以创建两种语言的实用程序函数来满足您的需要。

    julia> list() = Any[]                  # >>> list
    list (generic function with 1 method)  # <type 'list'>
    
    julia> list(n::Integer) = Vector{Any}(undef, n)  # >>> def nlist(n):
    list (generic function with 2 methods)           # ...     return [None for i in range(n)]
    
    julia> list()           # >>> list()
    0-element Array{Any,1}  # []
    
    julia> list(3)           # >>> nlist(3)
    3-element Array{Any,1}:  # [None, None, None]
     #undef
     #undef
     #undef
    
    推荐文章