最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python保存多行數據的方法匯總(除了列表數組字典)

 更新時間:2026年05月28日 09:23:05   作者:yuanpan  
剛學 Python 的小白,經常會先接觸列表、數組、字典,它們確實很常用,但寫代碼久了你會發(fā)現:不是所有多行數據都適合放進列表或字典里,本文就給介紹了Python除了列表數組字典,還能用什么保存多行數據,需要的朋友可以參考下

引言

剛學 Python 的小白,經常會先接觸列表、數組、字典。它們確實很常用,但寫代碼久了你會發(fā)現:不是所有“多行數據”都適合放進列表或字典里。

比如:

  • 有些數據不希望被別人改掉
  • 有些數據只想去重,不關心順序
  • 有些數據其實就是一大段文本
  • 有些數據很多,不想一次性全放進內存
  • 有些數據像 Excel 表格一樣,有行有列

這時候,我們就需要認識幾個新朋友:元組 tuple、集合 set、字符串 str、生成器 generator、DataFrame,最后再簡單提一下 namedtuple。

本文不講復雜底層原理,只講小白能立刻用上的東西。

1. 元組 tuple:像“不能隨便改的列表”

元組和列表很像,也能保存多行數據。區(qū)別是:元組創(chuàng)建好之后,里面的元素不能直接修改。

你可以把元組理解成一份“確認后的名單”或“固定配置”。

適用場景

  • 數據不希望被誤改
  • 保存固定信息,比如坐標、學生基本信息、配置項
  • 數據量不大,主要用來讀取

示例 1:保存多名學生姓名

# 使用小括號創(chuàng)建元組
# 元組里的數據有順序,可以通過索引訪問
students = ("小明", "小紅", "小剛")

# 打印整個元組
print("學生名單:", students)

# 訪問第 1 個學生,索引從 0 開始
print("第 1 個學生:", students[0])

# 訪問最后一個學生
print("最后一個學生:", students[-1])

示例 2:保存多行坐標數據

# 每個坐標點用一個小元組表示
# 外層再用一個元組保存多行坐標
points = (
    (10, 20),
    (30, 40),
    (50, 60)
)

# 遍歷每一個坐標點
for x, y in points:
    print("x坐標:", x, "y坐標:", y)

小結:元組適合保存不想被隨便改的數據。如果你只是讀取,不需要增刪改,元組很合適。

2. 集合 set:專門用來“去重”

集合最大的特點是:自動去重。

比如你收集了一堆學生姓名,里面有重復名字,集合可以幫你快速去掉重復項。

注意:集合不保證順序,所以不要用它來保存“必須按順序排列”的數據。

適用場景

  • 去掉重復數據
  • 判斷某個元素是否存在
  • 做交集、并集等簡單集合運算

示例 1:學生姓名去重

# 列表里有重復姓名
names = ["小明", "小紅", "小明", "小剛", "小紅"]

# set() 可以把列表轉換成集合,并自動去重
unique_names = set(names)

# 輸出結果里不會有重復姓名
print("去重后的姓名:", unique_names)

示例 2:找兩個班都報名的學生

# A班報名學生
class_a = {"小明", "小紅", "小剛"}

# B班報名學生
class_b = {"小紅", "小李", "小剛"}

# & 表示交集,也就是兩個集合都有的元素
both = class_a & class_b

print("兩個班都報名的學生:", both)

小結:集合最適合去重和判斷存在,不適合保存有固定順序的數據。

3. 字符串 str:也能保存多行文本數據

很多小白會覺得字符串只能保存一句話,其實字符串也可以保存多行數據。

比如從文件中讀取的內容、用戶輸入的多行文本、日志內容,本質上都可以用字符串保存。

適用場景

  • 保存多行文本
  • 保存日志、配置文本、CSV 原始內容
  • 需要按行拆分處理時

示例 1:用三引號保存多行文本

# 三引號可以保存多行字符串
text = """小明,88
小紅,95
小剛,76"""

# 直接打印多行文本
print(text)

示例 2:把多行字符串拆成一行一行處理

# 保存多行成績數據
text = """小明,88
小紅,95
小剛,76"""

# splitlines() 會按行拆分,得到一個列表
lines = text.splitlines()

# 遍歷每一行
for line in lines:
    # 每一行用逗號分隔姓名和成績
    name, score = line.split(",")

    # score 原來是字符串,這里轉成整數
    score = int(score)

    print(name, "的成績是", score)

小結:字符串適合保存原始文本,多行文本可以用三引號,處理時再按行拆開。

4. 生成器 generator:數據很多時,邊用邊取

生成器聽起來有點陌生,但小白可以先這樣理解:它不會一次性把所有數據都拿出來,而是你要一條,它給一條。

這很適合處理很多行數據,比如大文件、很多日志、很多圖片路徑。

適用場景

  • 數據量很大,不想一次性全部放進內存
  • 一邊讀取一邊處理
  • 只遍歷一次的數據

示例 1:用生成器生成多行數字

# 這個函數里用了 yield,它就變成了生成器函數
def number_generator():
    # range(1, 6) 會生成 1 到 5
    for num in range(1, 6):
        # yield 的意思是:先交出一個數據,下一次再繼續(xù)
        yield num

# 創(chuàng)建生成器對象
numbers = number_generator()

# 遍歷生成器,每次取出一個數字
for n in numbers:
    print("當前數字:", n)

示例 2:模擬逐行讀取數據

# 用生成器模擬讀取多行學生成績
def read_scores():
    data = [
        "小明,88",
        "小紅,95",
        "小剛,76"
    ]

    # 每次只返回一行數據
    for line in data:
        yield line

# 遍歷生成器,逐行處理
for line in read_scores():
    name, score = line.split(",")
    print(name, "成績:", score)

小結:生成器適合處理大量數據,優(yōu)點是省內存,缺點是通常只能從頭到尾遍歷一次。

5. DataFrame:像 Excel 表格一樣保存多行多列數據

DataFrame 是 pandas 庫里的數據類型。它非常適合保存“表格型數據”,比如學生成績表、商品表、訂單表。

小白可以把 DataFrame 理解成 Python 里的 Excel 表格。

適用場景

  • 數據有多行多列
  • 需要按列統(tǒng)計、篩選、排序
  • 處理 CSV、Excel、數據分析任務

如果你的電腦還沒有安裝 pandas,可以先在命令行執(zhí)行:

pip install pandas

示例 1:創(chuàng)建學生成績表

# 這個示例需要安裝 pandas
# 如果沒有安裝,會提示你先執(zhí)行 pip install pandas
try:
    import pandas as pd
except ImportError:
    print("你還沒有安裝 pandas,請先在命令行執(zhí)行:pip install pandas")
else:
    # 用字典創(chuàng)建 DataFrame
    # 每個鍵代表一列,每個列表代表這一列的數據
    data = {
        "姓名": ["小明", "小紅", "小剛"],
        "語文": [88, 95, 76],
        "數學": [90, 92, 80]
    }

    # 創(chuàng)建 DataFrame 表格
    df = pd.DataFrame(data)

    # 打印整個表格
    print(df)

示例 2:篩選成績大于 85 的學生

# 這個示例需要安裝 pandas
try:
    import pandas as pd
except ImportError:
    print("你還沒有安裝 pandas,請先在命令行執(zhí)行:pip install pandas")
else:
    # 創(chuàng)建學生成績表
    df = pd.DataFrame({
        "姓名": ["小明", "小紅", "小剛"],
        "語文": [88, 95, 76],
        "數學": [90, 92, 80]
    })

    # 篩選語文成績大于 85 的學生
    result = df[df["語文"] > 85]

    print("語文成績大于 85 的學生:")
    print(result)

小結:DataFrame 最適合表格數據,如果你以后要做數據分析、處理 Excel,它會非常常用。

6. 簡單提一下 namedtuple:讓元組更好讀

普通元組用索引訪問,比如 student[0]、student[1]。數據少還好,數據一多就不太直觀。

namedtuple 可以給元組里的每個位置起名字,這樣代碼更容易看懂。

# namedtuple 在 collections 模塊里
from collections import namedtuple

# 創(chuàng)建一個 Student 類型,里面有 name 和 score 兩個字段
Student = namedtuple("Student", ["name", "score"])

# 創(chuàng)建多個學生數據
students = (
    Student("小明", 88),
    Student("小紅", 95),
    Student("小剛", 76)
)

# 訪問時可以用 student.name 和 student.score
for student in students:
    print(student.name, "的成績是", student.score)

小結:namedtuple 適合保存結構固定的小數據,比普通元組更清楚。

7. 類型對比:小白怎么選?

下面用大白話總結一下:

類型能保存多行數據嗎是否有順序能不能修改適合場景
tuple有順序不能直接修改固定數據、配置、坐標
set不保證順序可以增刪去重、判斷是否存在
str有順序不能直接修改多行文本、日志、原始內容
generator按生成順序不適合修改大量數據、逐行處理
DataFrame有行列可以修改表格數據、統(tǒng)計、篩選
namedtuple有順序不能直接修改字段固定的小型記錄

小白選用建議:

  • 數據固定不想改:用 tuple
  • 只想去重:用 set
  • 保存多行文字:用 str
  • 數據很多,想一條條處理:用 generator
  • 像 Excel 一樣有行有列:用 pandas.DataFrame
  • 元組字段想更清楚:用 namedtuple

8. 小白常見錯誤和解決方法

錯誤 1:修改 tuple 導致 TypeError

錯誤代碼:

# 元組創(chuàng)建后不能直接修改
students = ("小明", "小紅", "小剛")

# 錯誤:不能修改元組里的元素
students[0] = "小李"

常見報錯:

TypeError: 'tuple' object does not support item assignment

原因:元組是不可變的,不能像列表一樣直接改。

修正方法:

# 如果確實需要修改,可以先轉成列表
students = ("小明", "小紅", "小剛")

# 轉成列表后就可以修改
students_list = list(students)
students_list[0] = "小李"

# 如果還想要元組,再轉回去
students = tuple(students_list)

print(students)

錯誤 2:把 set 當成列表,用索引訪問

錯誤代碼:

# 集合不保證順序,不能用索引訪問
names = {"小明", "小紅", "小剛"}

# 錯誤:set 不能用 names[0] 這樣訪問
print(names[0])

常見報錯:

TypeError: 'set' object is not subscriptable

原因:集合沒有固定位置,不能用索引。

修正方法:

# 如果只是想遍歷集合,可以用 for
names = {"小明", "小紅", "小剛"}

for name in names:
    print(name)

# 如果確實需要索引,可以先轉成列表
names_list = list(names)
print(names_list[0])

錯誤 3:生成器遍歷一次后,再遍歷沒數據

錯誤代碼:

# 創(chuàng)建一個生成器
numbers = (num for num in range(1, 4))

# 第一次遍歷,有數據
for n in numbers:
    print("第一次:", n)

# 第二次遍歷,沒有輸出
for n in numbers:
    print("第二次:", n)

原因:生成器通常只能從頭到尾走一遍,走完就沒有了。

修正方法:

# 如果需要遍歷多次,可以重新創(chuàng)建生成器
numbers = (num for num in range(1, 4))

for n in numbers:
    print("第一次:", n)

# 重新創(chuàng)建一個新的生成器
numbers = (num for num in range(1, 4))

for n in numbers:
    print("第二次:", n)

錯誤 4:沒有安裝 pandas 就使用 DataFrame

錯誤代碼:

# 如果電腦沒有安裝 pandas,這行會報錯
import pandas as pd

df = pd.DataFrame({"姓名": ["小明"], "成績": [88]})
print(df)

常見報錯:

ModuleNotFoundError: No module named 'pandas'

原因:pandas 是第三方庫,不是所有 Python 環(huán)境都自帶。

修正方法:

# 更友好的寫法:先捕獲導入錯誤
try:
    import pandas as pd
except ImportError:
    print("沒有安裝 pandas,請先執(zhí)行:pip install pandas")
else:
    df = pd.DataFrame({"姓名": ["小明"], "成績": [88]})
    print(df)

9. 結尾總結和小案例

今天我們認識了 Python 里除了列表、數組、字典之外,幾個也能保存多行數據的類型:

  • tuple:固定數據,不想被改
  • set:自動去重,適合判斷存在
  • str:保存多行文本
  • generator:大量數據邊用邊取
  • DataFrame:保存表格數據
  • namedtuple:讓元組字段更清楚

最后用一個簡單小案例,把幾個類型串起來。

小案例:處理報名名單,去重后逐行輸出

# 原始報名名單,用多行字符串保存
raw_text = """小明
小紅
小明
小剛
小紅"""

# 1. 把多行字符串拆成多行
names = raw_text.splitlines()

# 2. 用集合去重
unique_names = set(names)

# 3. 轉成元組,表示最終名單固定下來
final_names = tuple(unique_names)

# 4. 用生成器逐個輸出最終名單
def name_generator(names_tuple):
    # 每次返回一個姓名
    for name in names_tuple:
        yield name

# 遍歷生成器,打印最終報名名單
print("最終報名名單:")
for name in name_generator(final_names):
    print(name)

小白們剛開始不用一次記住所有類型。先記住一句話:數據不同,適合的容器也不同。多寫幾遍代碼,你就會慢慢知道什么時候該用 tuple,什么時候該用 set,什么時候該用 DataFrame。

以上就是Python保存多行數據的方法匯總的詳細內容,更多關于Python保存多行數據的資料請關注腳本之家其它相關文章!

相關文章

  • Python+matplotlib實現循環(huán)作圖的方法詳解

    Python+matplotlib實現循環(huán)作圖的方法詳解

    這篇文章主要為大家介紹了Python如何利用matplotlib實現循環(huán)作圖的,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習學習
    2022-06-06
  • 詳解Python的Flask框架中生成SECRET_KEY密鑰的方法

    詳解Python的Flask框架中生成SECRET_KEY密鑰的方法

    密鑰值的生成功能十分重要,幾乎也是各大Web開發(fā)框架的標配,Flask當然也不例外,這里我們就來詳解Python的Flask框架中生成SECRET_KEY密鑰的方法
    2016-06-06
  • Python實現二叉搜索樹增刪改查

    Python實現二叉搜索樹增刪改查

    二叉搜索樹是一種特殊的二叉樹,在本文中,我將介紹如何用Python語言實現一個簡單的二叉搜索樹,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2023-08-08
  • 詳解Django 時間與時區(qū)設置問題

    詳解Django 時間與時區(qū)設置問題

    這篇文章主要介紹了Django 時間與時區(qū)設置問題,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • Python匹配中文的正則表達式

    Python匹配中文的正則表達式

    正則表達式是一個特殊的字符序列,它能幫助你方便的檢查一個字符串是否與某種模式匹配。接下來通過本文給大家介紹Python匹配中文的正則表達式,感興趣的朋友一起學習吧
    2016-05-05
  • Pyscript使用本地Pyodide配置步驟

    Pyscript使用本地Pyodide配置步驟

    PyScript是“一個用于在 HTML(如 PHP)中交錯 Python 的系統(tǒng),這篇文章主要介紹了Pyscript使用本地Pyodide配置方法,需要的朋友可以參考下
    2022-12-12
  • Python如何在單元測試中給對象打補丁

    Python如何在單元測試中給對象打補丁

    這篇文章主要介紹了Python如何在單元測試中給對象打補丁,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-08-08
  • Python cookbook(數據結構與算法)將多個映射合并為單個映射的方法

    Python cookbook(數據結構與算法)將多個映射合并為單個映射的方法

    這篇文章主要介紹了Python cookbook(數據結構與算法)將多個映射合并為單個映射的方法,結合實例形式分析了Python字典映射合并操作相關實現技巧,需要的朋友可以參考下
    2018-04-04
  • Anaconda 查看、創(chuàng)建、管理和使用python環(huán)境的方法

    Anaconda 查看、創(chuàng)建、管理和使用python環(huán)境的方法

    這篇文章主要介紹了Anaconda 查看、創(chuàng)建、管理和使用python環(huán)境的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • 深入了解Python中Pytest Markers的使用方法

    深入了解Python中Pytest Markers的使用方法

    從這篇開始,逐一解決fixture是啥,mark是啥,參數request是啥,鉤子函數是啥,parametrize參數化是啥,這些問題,本片先介紹一下mark是啥,以及如何使用
    2023-09-09

最新評論

泸定县| 南开区| 松滋市| 岑溪市| 韶关市| 孝昌县| 萍乡市| 讷河市| 绿春县| 威信县| 张家口市| 井研县| 尼玛县| 门源| 南通市| 来安县| 常宁市| 双辽市| 精河县| 安阳县| 海丰县| 大连市| 容城县| 湘阴县| 朝阳区| 五寨县| 贡嘎县| 凌海市| 桃源县| 吴江市| 云阳县| 徐州市| 斗六市| 石嘴山市| 洞口县| 凤台县| 丰都县| 姚安县| 静安区| 滁州市| 十堰市|