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 для удаления элементов.

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

# Чтение входных данных
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Проверьте себя

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

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