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בחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה יסודות

תרגלו בעצמכם: קומפיילר R אונליין