Python 基于每个元组中的值的元组分区列表

Python 基于每个元组中的值的元组分区列表,python,list,sorting,if-statement,tuples,Python,List,Sorting,If Statement,Tuples,我试图将一组数据分为两个单独的列表,全职和兼职。但它似乎不起作用。有人能指出我哪里弄错了吗 data = [(['Andrew'], ['FullTime'], [38]), (['Fred'], ['PartTime'], [24]), (['Chris'], ['FullTime'], [38])] def sort(var1, datadump): positionlist = [] for b in range(0, len(datadu

我试图将一组数据分为两个单独的列表,全职和兼职。但它似乎不起作用。有人能指出我哪里弄错了吗

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):

这是因为每个元组中的元素都是包含字符串的列表,而不是字符串本身

这个问题也可以通过两种列表理解来解决:

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>
运行程序

c
当它破裂时,看看temp2

p temp2
它告诉你

['FullTime']
'FullTime'
看看var1

p var1
它告诉你

['FullTime']
'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:
    ...

使用<代码>如果(TEMP2(0)=VAR1):更广泛地,考虑在代码之前粘贴< <代码>打印< /COD>语句,如果语句,以验证所使用的变量包含您认为它们所做的数据。因此,
datadump[b][1]
会得到一个列表。按照建议,打印
temp2
将是调试的第一步。一般来说,通过打印进行调试对很多新手都有帮助另一件事是考虑改变你的数据结构(如果可能的话),仅仅是字符串而不是一个元素列表…因为你是初学者,我会敦促你为你的变量找到更多描述性的名字…或者改变数据不要使用字符串字段的列表。