簡體   English   中英

基於每個元組中的值的元組分區列表

[英]Partition list of tuples based on a value within each tuple

我正在嘗試將一組數據分類為 2 個單獨的列表,全職和兼職。 但它似乎不起作用。 有人可以指出我哪里出錯了嗎?

data = [(['Andrew'], ['FullTime'], [38]), 
       (['Fred'], ['PartTime'], [24]), 
       (['Chris'], ['FullTime'], [38])]

def sort(var1, datadump):
    positionlist = []
    for b in range(0, len(datadump)):
        temp2 = datadump[b][1]
        if (temp2 == var1):
            positionlist.append(datadump[b])
    return (positionlist)

FullTimeList = sort("FullTime", data) 
PartTimeList = sort("PartTime", data)

print(FullTimeList) 
print(PartTimeList)

這是通過改變解決的

if (temp2 == var1):

if (temp2[0] == var1):

這是因為每個元組中的元素是包含字符串的列表,而不是字符串本身。

這個問題也可以使用兩個列表推導式來解決:

FullTimeList = [x for x in data if x[1][0] == 'FullTime']
PartTimeList = [x for x in data if x[1][0] == 'PartTime']

不是答案:只是建議。 了解如何使用 python 調試器。

python -m pdb <pythonscript.py>

在本例中,在第 9 行設置斷點

b 9

運行程序

c

當它壞了,看看temp2

p temp2

它告訴你

['FullTime']

看var1

p var1

它告訴你

'FullTime'

這就是你的問題。

如果您使用描述性名稱命名變量和函數,您將獲得更好的理解:

data = [(['Andrew'], ['FullTime'], [38]), 
        (['Fred'], ['PartTime'], [24]), 
        (['Chris'], ['FullTime'], [38])]

def filter_records(value, records):
    result = []

    for i in range(len(records)):  # i and j are usual variable names for indices (b is not)
        record = records[i]
        name, work, hours = record   # give names to the parts 
        if work[0] == value:         # work[0] since the values are lists (no need for parenthesis)
            result.append(record)
    return result                    # no need for parenthesis

FullTimeList = filter_records("FullTime", data) 
PartTimeList = filter_records("PartTime", data)

模式:

for i in range(len(records)):
    record = records[i]

是 Python 中的一種反模式——這意味着有更好的方法來編寫它:

for record in records:
    ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM