Menu
CoddyTech

שינוי רשימות

חלק מהיחידה יסודות במסלול ה-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 אונליין