溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python列表、字典、循環(huán)、判斷舉例分析

發(fā)布時間:2021-11-25 11:44:23 來源:億速云 閱讀:143 作者:iii 欄目:互聯(lián)網(wǎng)科技

本篇內(nèi)容主要講解“python列表、字典、循環(huán)、判斷舉例分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“python列表、字典、循環(huán)、判斷舉例分析”吧!

練習(xí)案例

下面通過一個簡化的虛擬案例做一次深入學(xué)習(xí)python小練習(xí),有某果園銷售數(shù)據(jù)如下:

sell_list = [
    {'客戶': '張三', '種類': '蘋果','數(shù)量':100},
    {'客戶': '李四', '種類': '蘋果','數(shù)量':200},
    {'客戶': '李四', '種類': '香梨','數(shù)量':200},
    {'客戶': '李四', '種類': '香梨','數(shù)量':300},
    {'客戶': '張三', '種類': '蘋果','數(shù)量':100},
    {'客戶': '王五', '種類': '香蕉','數(shù)量':500},
    {'客戶': '王五', '種類': '香蕉','數(shù)量':150},
    {'客戶': '王五', '種類': '香蕉','數(shù)量':150},
    {'客戶': '王五', '種類': '蘋果','數(shù)量':500},
    {'客戶': '趙六', '種類': '葡萄','數(shù)量':300},
    {'客戶': '李四', '種類': '葡萄','數(shù)量':300},
    {'客戶': '趙六', '種類': '蘋果','數(shù)量':300},
]

客戶希望對數(shù)據(jù)進行整理,期待得到的數(shù)據(jù)集格式類似如下這樣:

result_list = [
    ['張三', {'蘋果': 300, '香蕉': 200, }],
    ['李四', {'蘋果': 100, '香蕉': 200, }],
    ['王五', {'蘋果': 100, '香蕉': 200, }],
]

需求分析

客戶原始數(shù)據(jù)池是列表,列表元素是客戶、果名、數(shù)量。現(xiàn)在的需求是對列表元素進行匯總,得出客戶、果名、數(shù)量的匯總表。

首先遍歷原始數(shù)據(jù)池,判斷客戶名

  • 若在數(shù)據(jù)集中客戶名不存在,則數(shù)據(jù)集中添加客戶名,同時將果名和數(shù)量以字典格式加入數(shù)據(jù)集。

  • 若在數(shù)據(jù)集中客戶名存在,則判斷果名

    • 若在數(shù)據(jù)集中果名存在,則將數(shù)量累加。

    • 若在數(shù)據(jù)集中果名不存在,則添加果名和數(shù)量。

通過以上分析有個大致的框架,通過2層嵌套循環(huán)加判斷來編寫代碼。

具體代碼

我設(shè)想的代碼有2種方案:

  • 二層循環(huán)嵌套if的列表實現(xiàn)方式,優(yōu)點是較省內(nèi)存,缺點是速度略慢:

result_list = []
for i in sell_list:
    for j in result_list:
        if j[0] == i['客戶']:
            if i['種類'] not in j[1]:
                j[1][i['種類']] = i['數(shù)量']
            else:
                j[1][i['種類']] = j[1][i['種類']] + i['數(shù)量']
            break
    else:
        result_list.append([i['客戶'], {i['種類']: i['數(shù)量'], }])

for i in result_list:
    print(i)

out:
['張三', {'蘋果': 200}]
['李四', {'蘋果': 200, '香梨': 500, '葡萄': 300}]
['王五', {'香蕉': 800, '蘋果': 500}]
['趙六', {'葡萄': 300, '蘋果': 300}]

上述代碼有一個需要特別注意的地方,循環(huán)體內(nèi)break會跳過整個循環(huán)體(含循環(huán)體的else部分)。這一點很多教材都沒有講得很透徹。

  • 單層循環(huán)嵌套if的字段實現(xiàn)方式,優(yōu)點是速度較快,缺點是較費內(nèi)存:

result_dict = {}
for i in sell_list:
    if i['客戶'] in result_dict:
        if i['種類'] not in result_dict[i['客戶']]:
            result_dict[i['客戶']][i['種類']] = i['數(shù)量']
        else:
            result_dict[i['客戶']][i['種類']] += i['數(shù)量']
    else:
        result_dict[i['客戶']] = {i['種類']: i['數(shù)量']}

for i, j in result_dict.items():
    print(i, j)

out:
張三 {'蘋果': 200}
李四 {'蘋果': 200, '香梨': 500, '葡萄': 300}
王五 {'香蕉': 800, '蘋果': 500}
趙六 {'葡萄': 300, '蘋果': 300}

在字典實現(xiàn)方式中看起來是比列表實現(xiàn)方式少了一層循環(huán),實質(zhì)上這個循環(huán)的目的在“if i['種類'] not in result_dict[i['客戶']]:”這個部分已經(jīng)實現(xiàn)了,在容器中找成員,字典是速度最快同時也是最費內(nèi)存的方式。

到此,相信大家對“python列表、字典、循環(huán)、判斷舉例分析”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI