我正在尝试为包含可变数据集的绘图创建图例。至少有2个,最多5个。前两个将始终存在,但其他三个是可选的,那么如何仅为现有数量的数据集创建图例?
我已经尝试过if语句告诉python如果该变量不存在该怎么办,但是没有用。也许这不是确定变量存在的正确方法。
line1 = os.path.basename(str(os.path.splitext(selectedFiles[0])[0]))
line2 = os.path.basename(str(os.path.splitext(selectedFiles[1])[0]))
if selectedFiles[2] in locals:
line3 = os.path.basename(str(os.path.splitext(selectedFiles[2])[0]))
else: line3 = None
if selectedFiles[3] in locals:
line4 = os.path.basename(str(os.path.splitext(selectedFiles[3])[0]))
else: line4 = None
if selectedFiles[4] in locals:
line5 = os.path.basename(str(os.path.splitext(selectedFiles[4])[0]))
else:line5 = None
legend((line1, line2, line3, line4, line5), loc='upper left')
以下是我遇到的错误:
if selectedFiles[2] in locals:
IndexError: tuple index out of range
他的代码可能存在多个问题(不确定“无”是否是处理不存在数据的正确方法)。请记住,我是python的新手,否则很少有编程经验,所以请耐心等待,尽量不要屈尊俯就,因为一些更有经验的用户倾向于这样做。
答案 0 :(得分:2)
我不知道你的数据结构是什么样的,但看起来你只是想要
lines = (os.path.basename(str(os.path.splitext(x)[0])) for x in selectedFiles)
legend(lines, loc='upper left')
答案 1 :(得分:2)
因为selectedFiles是一个元组,并且处理其中每个项目的逻辑是相同的。你可以使用for循环迭代它。
lines = [os.path.basename(str(os.path.splitext(filename)[0])) for filename in selectedFiles]
#extend lines' length to 5 and fill the space with None
lines = lines + [None] * (5-len(lines))
legend(lines,loc='upper left')
答案 2 :(得分:0)
我更喜欢这种方式。
line = []
for i in range(5):
if i < len(selectedFiles):
line.append(os.path.basename(str(os.path.splitext(selectedFiles[i])[0])))
else:
line.append(None)
legend(tuple(line), loc='upper left')
或者您可以随时使用except IndexError:
。