gpt4 book ai didi

Python - 检查列表的索引元素是否存在 - 最佳实践?

转载 作者:行者123 更新时间:2023-11-30 23:21:11 25 4
gpt4 key购买 nike

我有这样的东西:

for i in range(0,100,5):

text = ("Price\t",
foo[i+0].bar, "\t",
foo[i+1].bar, "\t",
foo[i+2].bar, "\t",
foo[i+3].bar, "\t",
foo[i+4].bar, "\t",
"Value", "\n")

file.writelines(text)

我的问题是:让我们假设i=0。对于这种情况,我肯定会有 foo[0]。但对于索引 1,2,3,4 foo 可以为空。例如,如果 foo 对于大于 2 的索引为空,我希望我的文本如下:

text = ("Price\t",
foo[0].bar, "\t",
foo[1].bar, "\t",
foo[2].bar, "\n")

我想过使用异常,但我想,如果我没有所有索引元素,我将无法构造text。 (迭代将停止?)那么,做到这一点的最佳实践是什么?我想不出一个简短的方法来做到这一点。基本上我需要的是:

text= ("Price\t",
ifexist(foo[0].bar, "\t"),
ifexist(foo[1].bar, "\t"),
ifexist(foo[2].bar, "\t"),
ifexist(foo[3].bar, "\t"),
ifexist(foo[4].bar, "\t"),
"Value", "\n")

ps:请不要忘记,为了简单起见,我假设了 i=0。但事实上,一般我会有一百多个值。

编辑:通过说“可以为空”,我的意思是索引可能超出列表的大小。

编辑2:Abot foo:

# start class
class Test:
def __init__(self, bar, bar2, bar3):
self.bar= a
self.bar2= b
self.bar3= c

# end class


for i in particular_list:
# read and parse the input file with indeces obtained from particular_list
# do calculations for temp_bar,temp_bar2,temp_bar3
foo.append(Test(temp_bar, temp_bar2, temp_bar3))

最佳答案

你会采取不同的方法;您可以对原始列表进行切片,然后使用 csv module处理制表符分隔和换行符:

import csv

with open('outputfile', 'w', newline='') as file:
writer = csv.writer(file, delimiter='\t')
for i in range(0, 100, 5):
row = foo[i:i + 5]
writer.writerow(['Price'] + row + ['Value'])

对列表进行切片总是返回一个新的列表对象,但如果您使用有效范围之外的切片索引,则结果是一个更短的列表或空列表:

>>> foo = ['spam', 'ham', 'eggs']
>>> foo[0:5]
['spam', 'ham', 'eggs']
>>> foo[5:10]
[]

同时,csv.writer() 对象负责将列表作为制表符分隔的字符串以及换行符写入文件。

您仍然可以使用切片,而不是使用 csv 模块,但可以使用采用任意元素列表的其他技术。 str.join()例如:

'\t'.join(['Price'] + foo[i:i + 5] + ['Value']) + '\n'

将生成一串制表符分隔的值,并附加换行符。这确实要求传递给 str.join() 的列表中的所有值都已经是字符串。

关于Python - 检查列表的索引元素是否存在 - 最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25064367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com