我有一个名为records的列表,其中包含records [1]中的mw值。然后if
,我用四个语句测试这些mw值,然后根据mw的值更改输出结果,如下所示。
mw = records[1]
if mw <= 100:
output1 =(records[1],"valueA", records[4], "moreItems")
if 100< mw <= 300:
output2 =("records[1]","valueB", records[4], "moreItems")
if 300< mw <= 600:
output3 =("records[1]","valueC", records[4], "moreItems")
if mw > 600:
output4 =("records[1]","valueD", records[4] , "moreItems")
if
语句背后的主要思想是,我需要基于mw值更改一些列表值。这意味着output1变量将与output2略有不同。
如何合并这四个输出?理想情况下,我想要输出1的所有结果,然后是2,然后是3,如下所示。
98.7,valueA,False,moreItems #from output1
50,valueA,False,moreItems #from output1
210,valueB,True,moreItems #From output2
400,valueC,True,moreItems #From output3
498,valueC,True,moreItems #From output3
580,valueC,True,moreItems #From output3
800,valueD,False,moreItems #From output4
我看不到只有4个变量如何获得所有输出。换句话说,使用大量带编号的“同级”变量只会让您头疼---您需要一个可以反复调用的函数。就像是:
def process_record(record):
mw = record[1]
if mw <= 100:
output = (record[1], "valueA", record[4], "moreItems")
elif 100 < mw <= 300:
output = (record[1], "valueB", record[4], "moreItems")
elif 300 < mw <= 600:
output = (record[1], "valueC", record[4], "moreItems")
elif 600 < mw:
output = (record[1], "valueD", record[4], "moreItems")
else:
raise ValueError("Illegal record: %s" % repr(record))
return output
这将返回分配给output1
,的相同元组output2
,依此类推,但可以根据需要使用多次。(请注意,由于它一次只能处理一个记录,因此将其名称和参数更改为单数“ record”。并且将单独的if
语句更改为elif
带有默认大小写的系列语句。)
您的输出元组以数字开头...在Python元组中,它们自动按其第一个元素排序,然后按第二个元素排序,依此类推。因此,您可以使用内置sorted
函数来生成所需的输出:
def main():
records = [
# You know how you're acquiring these records; I don't.
]
processed_records = [process_record(record) for record in records]
for record in sorted(processed_records):
print(",".join(str(dat) for dat in record))
return
如果在您的真实代码中,您没有幸运地将数字放在元组的开头,或者如果您的值类别字符串("valueA"
依此类推)没有按字母顺序排列为数字,则您仍然可以使用sorted
,但是您必须为其提供关键功能才能进行所需的排序。
一键功能被到列表中的每个元素自动应用进行排序,将其转换成一些更容易的排序,往往一些简单的像一个整数或字符串。"valueA"
如果您不关心数字顺序,则可以只返回-或-任意字符串。下面的示例对字符串,数字和其他所有内容进行排序,因为我无法确定其他字段是否有意义。
def processed_record_key(record):
int_val, value_category, unknown_boolean, unknown_string = record
return value_category, int_val, unknown_boolean, unknown_string
现在,您只需要使用它:
for record in sorted(processed_records, key=processed_record_key):
# Same as before...
查看Sorted HowTo了解更多排序技巧。
最后,我建议您考虑对数据记录使用namedtuple ---这将使您的元组(以及使用它们的代码)更具自描述性,并且更易于使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句