предвидение
Я рад, что вы увидели эту статью, но есть несколько вещей, которые я должен сообщить вам заранее, чтобы не тратить ваше время.
Это всего лишь мои учебные заметки, очень поверхностные и беспорядочные. Эта статья подходит только для вас, чтобы просмотреть или убить время.Содержание в целом подходит для последовательного чтения.При необходимости, вы можете связаться со мной для общения.
Основные структуры данных, рассматриваемые в Julia, следующие и представлены в этой статье в таком порядке:
- кортеж
- Словарь
- множество
кортеж
Оберните упорядоченный набор элементов в круглые скобки для создания кортежей, разделенных запятыми.Основное использование ничем не отличается от Python.
Syntax:
(item1, item2, ...)
Примеры следующие:
myfavoriteanimals = ("penguins", "cats", "sugargliders")
# ("penguins", "cats", "sugargliders")
myfavoriteanimals[1]
# "penguins"
myfavoriteanimals[1] = "otters" # 元组是不可变的,无法更新数据
# ERROR: MethodError: no method matching setindex!(::Tuple{String,String,String}, ::String, ::Int64)
В отличие от Python, Julia был расширен (версия 1.0 и выше), чтобы компоненты в кортежах могли называться:
myfavoriteanimals = (bird = "penguins", mammal = "cats", marsupial = "sugargliders")
# (bird = "penguins", mammal = "cats", marsupial = "sugargliders")
myfavoriteanimals[1]
# "penguins"
myfavoriteanimals.bird
# "penguins"
Словарь
Для создания словаря нужно передать встроенныйDict()
Функция, параметр функции может быть пустым или парой ключ-значение, пара ключ-значение должна использовать символ стрелки=>
ассоциировать.
Syntax:
Dict(key1 => value1, key2 => value2, ...)
Примеры следующие:
myphonebook = Dict("Jenny" => "867-5309", "Ghostbusters" => "555-2368")
# Dict{String,String} with 2 entries:
# "Jenny" => "867-5309"
# "Ghostbusters" => "555-2368"
myphonebook["Jenny"]
# "867-5309"
myphonebook["Kramer"] = "555-FILK"
# "555-FILK"
myphonebook
# Dict{String,String} with 3 entries:
# "Jenny" => "867-5309"
# "Kramer" => "555-FILK"
# "Ghostbusters" => "555-2368"
ключKramer
Удалить из словаря, вернуть значение как ключKramer
Соответствующее значение:
pop!(myphonebook, "Kramer")
# "555-FILK"
myphonebook
# Dict{String,String} with 2 entries:
# "Jenny" => "867-5309"
# "Ghostbusters" => "555-2368"
В отличие от кортежей и массивов, элементы в словаре не являются последовательными и не могут быть проиндексированы числами.В следующем примере Джулия попытается получить значение, соответствующее ключу «1»:
myphonebook[1]
# KeyError: key 1 not found
множество
И массивы, и кортежи содержат упорядоченные наборы, но массивы можно обновлять. Используйте квадратные скобки, чтобы различать массивы и кортежи. Основное использование такое же, как и в Python:
Syntax:
[item1, item2, ...]
myfriends = ["Ted", "Robyn", "Barney", "Lily", "Marshall"]
# 5-element Array{String,1}:
# "Ted"
# "Robyn"
# "Barney"
# "Lily"
# "Marshall"
Вернемся к подсказке:
-
5-element
Общее количество элементов в массиве равно 5 -
Array{String,1}
Указывает, что текущий массив -
String
Указывает, что каждый элемент массиваString
Тип, если в массиве несколько типов данных, он будет отображаться здесьany
-
1
Указывает, что это одномерный вектор, или, если это двумерная матрица, тоArray{String,2}
, трехмерныйArray{String,3}
и т. д., Julia намного легче понять, чем Python, в отображении информации о размерности многомерных массивов, что будет видно позже.
Julia полностью отличается от Python во многих отношениях, таких как индексирование с 1, что может быть менее проблематично позже, но кто знает, вы знаете.
myfriends[0]
# ERROR: BoundsError: attempt to access 5-element Array{String,1} at index [0]
myfriends[1]
# "Ted"
Другой пример — добавление строки к массиву чисел, что можно легко сделать в Python:
a = [1,2,3]
a.append("1")
print(a)
# [1, 2, 3, '1']
А вот в Юле не так много свободы, если в массиве строкmyfriends
Если вы вставите число, вы получите ошибку:
push!(myfriends, 1)
# ERROR: MethodError: Cannot `convert` an object of type Int64 to an object of type String
Но если вы начнете с создания нового содержащего элемента какAny
, то можно выполнить любой тип вставки:
a = [1,2,3,"3"]
# 4-element Array{Any,1}:
# 1
# 2
# 3
# "3"
pop!(a)
# "3"
a # 看下面,返回信息中提示当前数组内允许Any类型的数据存在
# 3-element Array{Any,1}:
# 1
# 2
# 3
push!(a, "1")
# 5-element Array{Any,1}:
# 1
# 2
# 3
# "1"
Массивы в Julia содержат гораздо больше информации о размерах, чем в Python.Следующее создает двумерный массив:
favorites = [["koobideh", "chocolate", "eggs"],["penguins", "cats", "sugargliders"]]
# 2-element Array{Array{String,1},1}:
# ["koobideh", "chocolate", "eggs"]
# ["penguins", "cats", "sugargliders"]
- внешний
2-element Array{...}
Указывает, что самый внешний слой содержит два элемента, оба из которыхArray{String,1}
тип,1
Указывает, что самое внешнее измерение равно 1. - Каждый элемент, содержащийся во внешнем слое, упомянутом выше, является
Array{String,1}
тип,1
Указывает, что все они являются одномерными векторами, количество элементов не указано, но типы элементовString
.
numbers = [[[1], [2], [3]], [[4], [5]]]
# 2-element Array{Array{Array{Int64,1},1},1}:
# [[1], [2], [3]]
# [[4], [5]]
В приведенном выше примере показан трехмерный массив, и количество элементов в каждом измерении не обязательно должно быть одинаковым. Как и в Python, julia по умолчанию является мелкой копией.Если вы хотите сделать глубокую копию, вы можете напрямую использовать встроенныйcopy
функция:
a = [1,2,3]
# 3-element Array{Int64,1}:
# 1
# 2
# 3
b = a # 浅拷贝
# 3-element Array{Int64,1}:
# 1
# 2
# 3
b[1] = 111
# 111
a,b
# ([111, 2, 3], [111, 2, 3])
c = copy(a) # 深拷贝
# 3-element Array{Int64,1}:
# 111
# 2
# 3
c[1] = 1
# 1
a, b ,c
# ([111, 2, 3], [111, 2, 3], [1, 2, 3])
Выше приведены основные структуры данных в Julia.