Stories

Detail Return Return

Python/JS/Go/Java同步學習(第二十一篇)四語言“列表增改查“對照表

🤝 免罵聲明:
  • 本文列表增改查操作經本蜀黎實戰整理,旨在提供快速參考指南📝
  • 因各語言版本迭代及不同系統環境差異,偶爾可能出現整理不全面之處,實屬正常✅
  • 歡迎理性交流補充,噴子勿噴——畢竟你行你上來寫,我敬你是條漢子,告訴我的你原文鏈接,我給你一鍵三連+轉發👍!
  • 若遇具體問題,請帶圖評論區留言,本蜀黎必拔碼相助🤝
    土味海報
🌿【虎山CTO·藥材使用警示】
  • 🍀是藥三分毒,代碼亦如方!
  • ❌文中所涉藥材均為技術隱喻,嚴禁實際配伍使用。
  • 🙏真實用藥請遵醫囑,亂用者——
  • 系統崩壞事小,氣血逆流事大!⚠️
📚 系列文章預告:
  • 近期內容將聚焦編程基礎構建,以「原創知識矩陣」形式系統梳理核心概念。每篇如連續劇集般環環相扣,建議按順序學習——知識點一鍋端,療效更持久!🔥

🧠【場景還原:學校的列表特訓】

⚡ 雷影老闆(拍桌怒吼):
  • 「🏆所有部門本週必須完成數據巡檢!列表操作不達標的,中午給老子手寫《火影鏈表心經》100遍!」
🦊 鳴人(抱頭慘叫):
  • 「伊魯卡老師救命!appendinsertextend到底啥區別啊?為什麼Python能直接混類型,Java非要讓我用ArrayList<Object>?!😫」
👨‍🏫 伊魯卡(粉筆頭精準命中):
  • 鳴人!列表操作就像配藥方——🌿
  • append → 加一味新藥(單獨一味)🥇
  • insert → 君藥插隊(指定位置)🥈
  • extend → 藥材大合集(融合多個)🥉
🐯 卡卡西(懶洋洋舉《親熱天堂》補刀):
  • 「嘖...連列表增刪都搞不定,以後怎麼跟我學影分身·多線程之術?」
🧘【扎馬步·列表增改查心法】
  • 🔍增如加藥,方法不同藥效迥異——
    • append → 加單味藥(精準投料)🥇
    • insert → 藥方插隊(君臣易位)🥈
    • extend → 藥材融合(合劑成方)🥉
  • 🔎查如辨藥,索引錯位則藥性全失——
    • 正索引從0起,負索引從-1起🍕
    • 越界如抓錯藥,系統必反噬!🍔
    • 改如調方,君臣佐使不可亂——🥓
    • 直接賦值如換藥,索引需精準🥨
    • 切片賦值如調方,區間需明確🍖
操作類型 Python JavaScript Go Java
末尾追加 list.append(x) arr.push(x) slice = append(slice, x) list.add(x)
指定插入 list.insert(i, x) arr.splice(i, 0, x) slice = append(slice[:i], append([]T{x}, slice[i:]...)...) list.add(i, x)
擴展列表 list.extend(seq) arr.push(...seq) slice = append(slice, seq...) list.addAll(collection)
按索引查 list[i] arr[i] slice[i] list.get(i)
按值查找 list.index(x) arr.indexOf(x) 需遍歷 list.indexOf(x)
修改元素 list[i] = x arr[i] = x slice[i] = x list.set(i, x)

✅ 核心差異解析:

  • Python:靈活混類型,append/extend/insert三法通吃,支持負索引 🏆
  • JavaScript:push/splice/...三劍客,數組可混合類型但元組需模擬 🎨
  • Go:類型嚴格,需用append手動拼切片,無內置indexOf
  • Java:ArrayList扛把子,類型需聲明,操作稍繁瑣但穩健🥋
⚠️【避坑指南·增改查界的“藥性相沖”】
🐍 Python:extend vs append 藥性不同
hd = ["山楂", "麥芽"]
hd.append(["神曲", "谷芽"])   # 💊 變成:['山楂','麥芽', ['神曲','谷芽']]
hd.extend(["神曲", "谷芽"])   # ✅ 變成:['山楂','麥芽','神曲','谷芽']

☕ Java:類型嚴格限制

List<String> hd = new ArrayList<>();
hd.add(10); // 💥 編譯錯誤!必須String
// 需用:List<Object> hd = new ArrayList<>();

⚡ Go:切片擴容需重新賦值

hd := []string{"山楂","麥芽"}
hd = append(hd, "神曲") // ✅ 必須重新賦值

💣 JavaScript:splice 的刪除陷阱

let hd = ["山楂","麥芽","神曲"];
hd.splice(1, 1); // 刪除索引1的元素(麥芽),不是插入!
📜【四語言實現示例】

Python:

hd = ["山楂", "麥芽"]
hd.append("神曲")          # 增
hd.insert(1, "谷芽")       # 插
hd[0] = "焦山楂"           # 改
print(hd[1])               # 查

JavaScript:

let hd = ["山楂", "麥芽"];
hd.push("神曲");           // 增
hd.splice(1, 0, "谷芽");   // 插
hd[0] = "焦山楂";          // 改
console.log(hd[1]);        // 查

Go:

hd := []string{"山楂","麥芽"}
hd = append(hd, "神曲")          // 增
hd = append(hd[:1], append([]string{"谷芽"}, hd[1:]...)...) // 插
hd[0] = "焦山楂"                 // 改
fmt.Println(hd[1])              // 查

Java:

List<String> hd = new ArrayList<>(Arrays.asList("山楂","麥芽"));
hd.add("神曲");                 // 增
hd.add(1, "谷芽");              // 插
hd.set(0, "焦山楂");            // 改
System.out.println(hd.get(1));  // 查
🧘【扎馬步·替換心法字符串vs列表】額外新增

| 特性 | 字符串(String) | 列表(List) |

可變性 ❌ 不可變 ✅ 可變
替換方法 str.replace(old, new) list[i] = new_value
list[start:end] = [新序列]
效果 返回新字符串 原列表直接修改
適用場景 全文替換、模式替換 指定位置修改、區間替換

⚠️【避坑指南:替換界的“陰陽雙生」】

🐍 Python:字符串replace vs 列表賦值
# 字符串:必須用replace(因為不可變)
藥方_str = "君藥:山楂,臣藥:麥芽"
新藥方 = 藥方_str.replace("麥芽", "焦麥芽")  # ✅ 生成新字符串
print(藥方_str)  # 原字符串不變!"君藥:山楂,臣藥:麥芽"
print(新藥方)    # "君藥:山楂,臣藥:焦麥芽"

# 列表:直接賦值修改(因為可變)
藥方_list = ["山楂", "麥芽", "神曲"]
藥方_list[1] = "焦麥芽"  # ✅ 直接修改原列表
print(藥方_list)  # ['山楂', '焦麥芽', '神曲']

💥 經典錯誤示範:

hd = ["山楂", "麥芽", "神曲"]
hd.replace("麥芽", "焦麥芽")  # 💥 報錯!列表沒有replace方法!
# 錯誤提示:AttributeError: 'list' object has no attribute 'replace'
操作 Python JavaScript Go Java
字符串替換 str.replace(old, new) str.replace(old, new) strings.Replace(...) str.replace(old, new)
列表替換 list[i] = x arr[i] = x slice[i] = x list.set(i, x)
列表區間替換 list[i:j] = [a,b,c] arr.splice(i, n, ...) 需手動切片重組 list.subList(i,j).clear(); list.addAll(i, newList)

✅【實戰場景:藥方修改模擬】

場景:將藥方中的“麥芽”改為“焦麥芽”

Python(正確做法):

# 字符串藥方(全文替換)
藥方文本 = "君藥:山楂,臣藥:麥芽,佐藥:神曲"
新藥方文本 = 藥方文本.replace("麥芽", "焦麥芽")  # ✅

# 列表藥方(索引替換)
藥材列表 = ["山楂", "麥芽", "神曲"]
藥材列表[1] = "焦麥芽"  # ✅

其他語言對比:

// JavaScript
let 藥方文本 = "君藥:山楂,臣藥:麥芽";
let 新藥方文本 = 藥方文本.replace("麥芽", "焦麥芽"); // ✅

let 藥材列表 = ["山楂", "麥芽", "神曲"];
藥材列表[1] = "焦麥芽"; // ✅
// Java
String 藥方文本 = "君藥:山楂,臣藥:麥芽";
String 新藥方文本 = 藥方文本.replace("麥芽", "焦麥芽"); // ✅

List<String> 藥材列表 = Arrays.asList("山楂", "麥芽", "神曲");
藥材列表.set(1, "焦麥芽"); // ✅

go

藥方文本 := "君藥:山楂,臣藥:麥芽"
新藥方文本 := strings.Replace(藥方文本, "麥芽", "焦麥芽", -1) // ✅

藥材列表 := []string{"山楂", "麥芽", "神曲"}
藥材列表[1] = "焦麥芽" // ✅
🐯【虎山CTO的替換終極暴論】
  • 字符串如經文:不可直接修改,只能謄寫新卷(replace)🍥
  • 列表如藥櫃:可開抽屜直接換藥(索引賦值/切片替換)🔁
  • 元組如古方:不可修改,只能重新抄錄(轉列表→改→轉回)💢
  • 字典如藥典:可通過藥名直接修訂藥性(鍵值覆蓋)🎫
❌ 切忌混淆:
  • 把列表當字符串用replace → 如用藥杵煎藥,必炸💥
  • 把字符串當列表直接賦值→ 如刻舟求劍,徒勞無功😱

🧪【記憶口訣】

字符串:
  • replace 換全文,原串不變新串生✅
列表:
  • 索引賦值直接改,切片替換更靈活✅
跨語言通用:
  • 字符串替用replace列表替用索引賦📌

🧘【扎馬步·Java列表創建心法】額外新增

特性 Arrays.asList()(批量創建) 一個個 add()(逐個添加)
創建方式 一次性傳入所有元素 循環調用 add() 方法
性能 ⚡️ 高速(直接內存分配) 🐢 低速(反覆擴容)
內存佔用 ✅ 緊湊(一次性分配) ❌ 浪費(可能多次擴容)
適用場景 已知所有元素的靜態列表 動態添加元素的不確定列表
修改性 ❌ 固定大小(不可 add/remove ✅ 可動態修改

🧪【實戰場景:藥方創建模擬】

場景1:已知藥材列表(優先批量)
// ✅ 推薦:批量創建
List<String> 藥方 = Arrays.asList("山楂", "麥芽", "神曲", "雞內金");
場景2:動態添加藥材(只能逐個)
// ✅ 合理使用:動態添加
List<String> 藥方 = new ArrayList<>();
藥方.add("山楂");  // 先加君藥
if(需要健胃) {
    藥方.add("麥芽");  // 動態添加臣藥
}
if(需要消食) {
    藥方.add("神曲");  // 動態添加佐藥
}
場景3:大數據量優化(預分配容量)
// ✅ 高級技巧:預分配容量
List<String> 萬種藥材 = new ArrayList<>(100000);  // 預先分配容量
for(int i=0; i<100000; i++) {
    萬種藥材.add("藥材" + i);  // 🚀 避免反覆擴容
}
操作 Java Python JavaScript Go
批量創建 Arrays.asList("a","b","c") ["a","b","c"] ["a","b","c"] []string{"a","b","c"}
逐個添加 list.add("a") 循環 list.append("a") 循環 arr.push("a") 循環 append(slice, "a") 循環
性能建議 優先批量創建 無明顯差別 無明顯差別 無明顯差別
🐯【虎山CTO的創建暴論】
  • 批量創建如整副藥方一次性抓取:高效緊湊,君臣有序🚀
  • 逐個添加如現抓現配:靈活但低效,易氣血紊亂😵
❌ 萬級數據切忌逐個add:
  • 如用藥杵一味味搗藥,等到天亮也煎不完😱
✅ 已知元素必用批量創建:
  • 如二代四代飛雷神·完成術💪
以下是本蜀黎整理源碼和截圖⏬
1.Python源碼
# ==================== 財務列表模塊 ====================
# 賬本.append(新科目)  # 給資產負債表續尾巴 📜
# 憑證.insert(0, 紅衝單)  # 在賬本最前面插隊 🔝
# 明細.extend(子目列表)  # 把碎銀子熔成整錠 💰
# ⚠️ERP_冷溪虎山:亂插隊會導致試算不平衡

hd = ['山楂','神曲','麥芽','谷芽','雞矢藤','雞內金','蜘蛛香','沙棘'] #消化藥 列表
hdj = ["焦山楂","焦神曲","焦麥芽"] #消化藥 焦三仙
hd1 = ["山楂","焦山楂"] #一仙

hd.append(["焦山楂","焦神曲","焦麥芽"])  #添加列表
hd.append(("焦山楂","焦神曲","焦麥芽"))  #添加元組
hd.append(10)
hd.append("山楂")
print(hd)

print("\n🍒🍒🍒🍒🍒🍒🍒🍒🍒🍒🍒以下是焦三仙改造")
hdj.insert(1,"1,山楂")       #索引1插入元素
hdj.insert(3,(2,"神曲",3,"麥芽")) #索引3插入混合元素
print(hdj)

print("\n🍒🍒🍒🍒🍒🍒🍒🍒🍒🍒🍒以下是焦三仙添加")
hd1.extend(["神曲","焦神曲"]) #添加列表
hd1.extend({"麥芽":"焦麥芽"}) #添加字典的key
print(hd1)

Python

2.Nodejs源碼
// ==================== 中藥列表模塊 ====================
// 藥方追加新藥材  // 給仙丹配方加特效 🌟
// 在首位插入君藥  // VIP藥材優先入場 👑
// 合併配伍清單  // 君臣佐使大團圓 🎎
// ⚠️虎山老藥師:亂入藥材會引發丹劫

let hd = ['山楂', '神曲', '麥芽', '谷芽', '雞矢藤', '雞內金', '蜘蛛香', '沙棘'];
let hdj = ["焦山楂", "焦神曲", "焦麥芽"];
let hd1 = ["山楂", "焦山楂"];

// 添加元素(JS數組可混合類型)
hd.push(["焦山楂", "焦神曲", "焦麥芽"]); // 添加子數組
hd.push(["焦山楂", "焦神曲", "焦麥芽"]); // JS無元組,用數組模擬
hd.push(10);
console.log(hd);

console.log("\n🍒🍒🍒🍒🍒🍒🍒🍒🍒🍒🍒 以下是焦三仙改造");
hdj.splice(1, 0, "1,山楂"); // 在索引1插入
hdj.splice(3, 0, [2, "神曲", 3, "麥芽"]); // 插入混合數組
console.log(hdj);

console.log("\n🍒🍒🍒🍒🍒🍒🍒🍒🍒🍒🍒 以下是焦三仙添加");
hd1.push(...["神曲", "焦神曲"]); // 擴展運算符相當於extend
hd1.push(...Object.keys({"麥芽": "焦麥芽"})); // 添加字典鍵
console.log(hd1);

nodejs

3.Go源碼
package main

import (
    "fmt"
)

// ==================== 倉儲列表模塊 ====================
// 貨架追加新商品  // 給倉庫接上新尾巴 🦎
// 緊急貨品插隊  // 物流綠色通道 🚦
// 合併批次庫存  // 集裝箱拼貨大法 🚢
// ⚠️冷溪物流:插隊會導致貨架雪崩

func main() {
    // Go切片需要預先聲明類型
    hd := []interface{}{"山楂", "神曲", "麥芽", "谷芽", "雞矢藤", "雞內金", "蜘蛛香", "沙棘"}
    hdj := []string{"焦山楂", "焦神曲", "焦麥芽"}
    hd1 := []interface{}{"山楂", "焦山楂"}

    // 添加元素(Go需類型斷言)
    hd = append(hd, []string{"焦山楂", "焦神曲", "焦麥芽"})  // 添加子切片
    hd = append(hd, [3]string{"焦山楂", "焦神曲", "焦麥芽"}) // 數組模擬元組
    hd = append(hd, 10)
    fmt.Println(hd)

    fmt.Println("\n🍒🍒🍒🍒🍒🍒🍒🍒🍒🍒🍒以下是焦三仙改造")
    hdj = append(hdj[:1], append([]string{"1,山楂"}, hdj[1:]...)...) // 在索引1插入
    hdj = append(hdj[:3], append([]string{fmt.Sprint([]interface{}{2, "神曲", 3, "麥芽"})}, hdj[3:]...)...)
    fmt.Println(hdj)

    fmt.Println("\n🍒🍒🍒🍒🍒🍒🍒🍒🍒🍒🍒以下是焦三仙添加")
    hd1 = append(hd1, "神曲", "焦神曲")                  // 直接追加
    for k := range map[string]string{"麥芽": "焦麥芽"} { // 添加map鍵
        hd1 = append(hd1, k)
    }
    fmt.Println(hd1)
}

golang

4.Java源碼
import java.util.*;

// ==================== ERP列表模塊 ====================
// 流程追加新節點  // 給審批流續命 🌱
// 緊急事項插隊  // 系統特權通道 ⚡
// 合併部門列表  // 組織架構大重組 🏢
// ⚠️ERP老兵_冷溪虎山:順序錯亂會觸發系統癲癇

class main21 {
    public static void main(String[] args) {
        // 消化藥列表(字符串)
        List<String> hd = new ArrayList<>(Arrays.asList(
                "山楂", "神曲", "麥芽", "谷芽", "雞矢藤", "雞內金", "蜘蛛香", "沙棘"));

        // 焦三仙列表
        List<String> hdj = new ArrayList<>(Arrays.asList(
                "焦山楂", "焦神曲", "焦麥芽"));

        // 一仙列表
        List<String> hd1 = new ArrayList<>(Arrays.asList(
                "山楂", "焦山楂"));

        // 子列表和元組(用List<Object>存儲)
        List<Object> complexList = new ArrayList<>(); //封神
        complexList.addAll(hd); // 原始列表
        complexList.add(Arrays.asList("焦山楂", "焦神曲", "焦麥芽")); // 子列表
        complexList.add(List.of("焦山楂", "焦神曲", "焦麥芽")); // 元組(不可變)
        complexList.add(10); // 整數
        System.out.println(complexList);
        System.out.println("\"\uD83C\uDF52\uD83C\uDF52\uD83C\uDF52\uD83C\uDF52\uD83C\uDF52\uD83C\uDF52\uD83C\uDF52\uD83C\uDF52\uD83C\uDF52\uD83C\uDF52\uD83C\uDF52以下是焦三仙改造\"");

        // 焦三仙改造
        hdj.add(1, "1,山楂");
        hdj.add(3, Arrays.asList(2, "神曲", 3, "麥芽").toString()); // 轉為字符串
        System.out.println(hdj);
        System.out.println("\"\uD83C\uDF52\uD83C\uDF52\uD83C\uDF52\uD83C\uDF52\uD83C\uDF52\uD83C\uDF52\uD83C\uDF52\uD83C\uDF52\uD83C\uDF52\uD83C\uDF52\uD83C\uDF52以下是焦三仙添加\"");
        // 焦三仙添加
        hd1.addAll(Arrays.asList("神曲", "焦神曲"));
        // 添加字典鍵(用List模擬)
        List<String> dictKeys = new ArrayList<>(new HashMap<String, String>() {{
            put("麥芽", "焦麥芽");
        }}.keySet());
        hd1.addAll(dictKeys);
        System.out.println(hd1);
    }
}

Java

源碼分享結束⏫

📜【結局:全員通關】

⚡ 雷影老闆(盯着整齊的列表代碼目瞪口呆):
  • 「🏆這...這操作比我的雷遁·查克拉模式還流暢!全員加班費翻倍——但必須學會四語言增改查,否則年終獎扣去修雷影辦公室的牆!」

🌸 雛田(小聲對鳴人説):

  • 「鳴人...下次用insert時記得索引從0開始...就像藥方裏的君藥必須排第一位...🥇」

🦊 鳴人(舉着拉麪碗蹦起來):
「哈哈哈!原來增改查就是加叉燒、插筍乾、換湯底!我會了!佐助——來比誰先改完一樂菜單!🍜」

🐯 卡卡西(默默合上《親熱天堂》):

  • 「嗯...總算有點樣子了。下次教你們用切片術破解幻術·樹結構數據...📙」

💥 佐助(寫輪眼微閃):

  • 「🎨哼...吊車尾的,等你能用Go手動實現insert再説吧。」
🐯【虎山CTO的終極暴論】
  • 增如加藥,不可亂序🥇
  • 改如調方,不可越界🥈
  • 查如辨藥,不可錯位🥉

🧪【附:四語言增改查心法口訣】

Python:
  • append 加藥,insert 插隊,extend 融合,索引從0起🏆
JavaScript:
  • push 加藥,splice 插隊,... 融合,類型可混用🥇
Go:
  • append 加藥,切片拼插,類型嚴格,需手動賦值🥈
Java:
  • add 加藥,add 插隊,addAll融合,類型需聲明🥉

⚠️ 免責聲明(附因果律警告)

本代碼已注入中醫玄學能量,請謹慎使用:

  • ✅ 允許白嫖,但白嫖不點贊可能導致:

    • 下次面試官恰好問到這個算法
    • 鍵盤自動打出//這裏感謝冷溪虎山CTO
    • 奶茶精準灑在剛寫好的代碼上
  • ✅ 允許商用轉發,但商用不註明出處可能觸發:

    • 系統類型混亂自動轉型
    • 數據庫莫名存儲"君臣佐使"字段
  • ✅ 允許吐槽,但吐槽不帶改進建議可能引發:

    • 終生與老闆N連鞭相愛相殺

🚀 現在立即行動:

  1. 點贊 → 吸收本篇算法精華+怪蜀黎腦洞思維
  2. 收藏 → 避免日後求醫無門
  3. 關注 → 接收更多「中醫+代碼」腦洞
  4. 評論區留言 → 領取你的專屬「算法藥方」

⚠️ 友情提示:

  • 本文內容過於硬核,建議點贊收藏轉發三連,避免小編心情波動導致文章神秘消失
  • 畢竟小編今天可能愛答不理,明天可能高攀不起——
  • 但你的收藏夾,永遠是你最穩的知識備份!

    🐶💻 (小聲説:關我小黑屋?不存在的,備份早已同步GitHub/公眾號/網盤!)

📚 往期爆文推薦,VIP輪換解鎖:

📖Python/JS/Go/Java四語言同步學習,跨語言系列上線(別在糾結學什麼單語言了)

🔍 沒看過前傳?快補課!
1-18篇請移步至"PY-JS-GO-JAVA基礎進階學習系列"合集中閲讀

  • Python/JS/Go/Java同步學習(第二十篇)四語言“列表遍歷“對照表: 雷影“老闆“發飆要求員工下班留校培訓風暴(附源碼/截圖/參數表/避坑指南)
  • Python/JS/Go/Java同步學習(第十九篇)四語言“列表相關操作“對照表: 雷影“老闆“發飆要求員工下班留校培訓風暴(附源碼/截圖/參數表/避坑指南)
  • Python/JS/Go/Java同步學習(第十八篇)四語言“常用時間類型格式化“對照表: 財務“小南“紙式格式化術處理憑證內容崩潰(附源碼/截圖/參數表/避坑指南)
user avatar
0 users favorite the story!

Post Comments

Some HTML is okay.