Menu
Coddy logo textTech

Изменение списков

Часть раздела Основы путешествия по R на Coddy — урок 73 из 78.

Теперь, когда вы знаете, как создавать списки и получать доступ к их элементам, давайте научимся их изменять. Вы можете изменять существующие элементы, добавлять новые или полностью удалять их.

Чтобы изменить существующий элемент, используйте двойные скобки с присваиванием:

my_list <- list(10, "hello", TRUE)
my_list[[2]] <- "world"
print(my_list)

Вывод:

[[1]]
[1] 10

[[2]]
[1] "world"

[[3]]
[1] TRUE

Чтобы добавить новый элемент, просто присвойте значение индексу, который еще не существует:

my_list <- list(10, "hello")
my_list[[3]] <- FALSE
print(my_list)

Вывод:

[[1]]
[1] 10

[[2]]
[1] "hello"

[[3]]
[1] FALSE

Чтобы удалить элемент, присвойте ему NULL:

my_list <- list(10, "hello", TRUE)
my_list[[2]] <- NULL
print(my_list)

Вывод:

[[1]]
[1] 10

[[2]]
[1] TRUE

Обратите внимание, что после удаления второго элемента оставшиеся элементы сдвигаются, чтобы заполнить образовавшееся пространство. Элемент, который находился на позиции 3, теперь находится на позиции 2.

challenge icon

Задание

Легко

Вы получите три строки входных данных:

  1. Три значения, разделенных запятыми, для инициализации списка (например, 50,hello,TRUE)
  2. Индекс и новое значение, разделенные запятой, для модификации (например, 2,goodbye)
  3. Индекс элемента, который необходимо удалить (например, 3)

Выполните следующие операции:

  1. Создайте список с тремя начальными значениями (преобразуйте их в соответствующие типы: числовой, символьный, логический)
  2. Выведите исходный список
  3. Измените элемент по указанному индексу на новое значение (сохраните его как символьную строку)
  4. Выведите список после модификации
  5. Добавьте в список новый четвертый элемент со значением 999
  6. Выведите список после добавления нового элемента
  7. Удалите элемент по указанному индексу (из третьей строки входных данных)
  8. Выведите финальный список

Например, если входные данные следующие:

100,world,FALSE
1,updated
2

Выходные данные должны быть такими:

[[1]]
[1] 100

[[2]]
[1] "world"

[[3]]
[1] FALSE

[[1]]
[1] "updated"

[[2]]
[1] "world"

[[3]]
[1] FALSE

[[1]]
[1] "updated"

[[2]]
[1] "world"

[[3]]
[1] FALSE

[[4]]
[1] 999

[[1]]
[1] "updated"

[[2]]
[1] FALSE

[[3]]
[1] 999

Объяснение:

  • Исходный список: 100, "world", FALSE
  • После изменения индекса 1: "updated", "world", FALSE
  • После добавления четвертого элемента: "updated", "world", FALSE, 999
  • После удаления индекса 2: "updated", FALSE, 999 (оставшиеся элементы смещаются)

Не забудьте использовать двойные скобки [[ ]] для модификации и присваивать NULL для удаления элементов.

Шпаргалка

Чтобы изменить существующий элемент в списке, используйте двойные скобки с присваиванием:

my_list <- list(10, "hello", TRUE)
my_list[[2]] <- "world"

Чтобы добавить новый элемент в список, присвойте значение индексу, который еще не существует:

my_list <- list(10, "hello")
my_list[[3]] <- FALSE

Чтобы удалить элемент из списка, присвойте ему значение NULL:

my_list <- list(10, "hello", TRUE)
my_list[[2]] <- NULL

При удалении элемента остальные элементы сдвигаются, чтобы заполнить пробел. Элемент, который находился на позиции 3, перемещается на позицию 2.

Попробуйте сами

# Чтение входных данных
con <- file("stdin", "r")
initial_values <- suppressWarnings(readLines(con, n = 1))  # Три значения, разделенные запятыми
modify_input <- suppressWarnings(readLines(con, n = 1))    # Индекс и новое значение
remove_index <- suppressWarnings(readLines(con, n = 1))    # Индекс для удаления
close(con)

# Разбор начальных значений
values <- strsplit(initial_values, ",")[[1]]
val1 <- as.numeric(values[1])
val2 <- values[2]
val3 <- as.logical(values[3])

# Разбор данных для модификации
mod_parts <- strsplit(modify_input, ",")[[1]]
mod_index <- as.numeric(mod_parts[1])
mod_value <- mod_parts[2]

# Разбор индекса для удаления
rem_index <- as.numeric(remove_index)

# TODO: Напишите ваш код ниже
# 1. Создайте список с тремя начальными значениями (val1, val2, val3)
# 2. Выведите исходный список
# 3. Измените элемент по индексу mod_index на значение mod_value
# 4. Выведите список после модификации
# 5. Добавьте новый четвертый элемент со значением 999
# 6. Выведите список после добавления
# 7. Удалите элемент по индексу rem_index (используйте NULL)
# 8. Выведите финальный список
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы