🤝 免罵聲明:
- 本文
列表增改查操作經本蜀黎實戰整理,旨在提供快速參考指南📝- 因各語言版本迭代及不同系統
環境差異,偶爾可能出現整理不全面之處,實屬正常✅- 歡迎理性交流補充,噴子勿噴——畢竟你行你上來寫,我敬你是條漢子,告訴我的你原文鏈接,我給你一鍵三連+轉發👍!
- 若遇具體問題,請帶圖評論區留言,本蜀黎必拔碼相助🤝
🌿【虎山CTO·藥材使用警示】
- 🍀是藥
三分毒,代碼亦如方! - ❌文中所涉藥材均為技術隱喻,嚴禁實際配伍使用。
- 🙏真實用藥請遵醫囑,亂用者——
- 系統崩壞事小,氣血逆流事大!⚠️
📚 系列文章預告:
- 近期內容將聚焦編程基礎構建,以
「原創知識矩陣」形式系統梳理核心概念。每篇如連續劇集般環環相扣,建議按順序學習——知識點一鍋端,療效更持久!🔥
🧠【場景還原:學校的列表特訓】
⚡ 雷影老闆(拍桌怒吼):
- 「🏆所有部門本週必須完成數據巡檢!列表操作不達標的,中午給老子手寫《火影鏈表心經》100遍!」
🦊 鳴人(抱頭慘叫):
- 「伊魯卡老師救命!
append、insert、extend到底啥區別啊?為什麼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)
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);
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)
}
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);
}
}
源碼分享結束⏫
📜【結局:全員通關】
⚡ 雷影老闆(盯着整齊的列表代碼目瞪口呆):
- 「🏆這...這操作比我的雷遁·查克拉模式還流暢!全員加班費翻倍——但必須學會四語言增改查,否則年終獎扣去修雷影辦公室的牆!」
🌸 雛田(小聲對鳴人説):
- 「鳴人...下次用
insert時記得索引從0開始...就像藥方裏的君藥必須排第一位...🥇」
🦊 鳴人(舉着拉麪碗蹦起來):
「哈哈哈!原來增改查就是加叉燒、插筍乾、換湯底!我會了!佐助——來比誰先改完一樂菜單!🍜」
🐯 卡卡西(默默合上《親熱天堂》):
- 「嗯...總算有點樣子了。下次教你們用
切片術破解幻術·樹結構數據...📙」
💥 佐助(寫輪眼微閃):
- 「🎨哼...吊車尾的,等你能用Go手動實現
insert再説吧。」
🐯【虎山CTO的終極暴論】
- 增如加藥,不可亂序🥇
- 改如調方,不可越界🥈
- 查如辨藥,不可錯位🥉
🧪【附:四語言增改查心法口訣】
Python:
append加藥,insert插隊,extend融合,索引從0起🏆
JavaScript:
push加藥,splice插隊,... 融合,類型可混用🥇
Go:
append加藥,切片拼插,類型嚴格,需手動賦值🥈
Java:
add加藥,add插隊,addAll融合,類型需聲明🥉
⚠️ 免責聲明(附因果律警告)
本代碼已注入中醫玄學能量,請謹慎使用:
-
✅ 允許白嫖,但白嫖不點贊可能導致:
- 下次面試官恰好問到這個算法
- 鍵盤自動打出
//這裏感謝冷溪虎山CTO - 奶茶精準灑在剛寫好的代碼上
-
✅ 允許商用轉發,但商用不註明出處可能觸發:
- 系統類型混亂自動轉型
- 數據庫莫名存儲"君臣佐使"字段
-
✅ 允許吐槽,但吐槽不帶改進建議可能引發:
- 終生與老闆N連鞭相愛相殺
🚀 現在立即行動:
- 點贊 → 吸收本篇算法精華+怪蜀黎腦洞思維
- 收藏 → 避免日後求醫無門
- 關注 → 接收更多「中醫+代碼」腦洞
- 評論區留言 → 領取你的專屬「算法藥方」
⚠️ 友情提示:
- 本文內容過於硬核,建議點贊收藏轉發三連,避免小編
心情波動導致文章神秘消失! - 畢竟小編今天可能愛答不理,明天可能高攀不起——
-
但你的收藏夾,永遠是你最穩的知識備份!
🐶💻 (小聲説:關我小黑屋?不存在的,備份早已同步GitHub/公眾號/網盤!)
📚 往期爆文推薦,VIP輪換解鎖:
📖Python/JS/Go/Java四語言同步學習,跨語言系列上線(別在糾結學什麼單語言了)
🔍 沒看過前傳?快補課!
前1-18篇請移步至"PY-JS-GO-JAVA基礎進階學習系列"合集中閲讀
- Python/JS/Go/Java同步學習(第二十篇)四語言“列表遍歷“對照表: 雷影“老闆“發飆要求員工下班留校培訓風暴(附源碼/截圖/參數表/避坑指南)
- Python/JS/Go/Java同步學習(第十九篇)四語言“列表相關操作“對照表: 雷影“老闆“發飆要求員工下班留校培訓風暴(附源碼/截圖/參數表/避坑指南)
- Python/JS/Go/Java同步學習(第十八篇)四語言“常用時間類型格式化“對照表: 財務“小南“紙式格式化術處理憑證內容崩潰(附源碼/截圖/參數表/避坑指南)