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



我正在尝试将一组数据分类为 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:
...

最新更新