1

我正在尝试为具有可变数据集的图创建图例。至少有 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 新手,没有什么编程经验,所以请耐心等待,不要屈尊俯就,因为一些更有经验的用户往往会这样做。

4

3 回答 3

2

我不知道你的数据结构是什么样的,但看起来你只是想要

lines = (os.path.basename(str(os.path.splitext(x)[0])) for x in selectedFiles)

legend(lines, loc='upper left')
于 2013-10-12T06:15:39.197 回答
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')
于 2013-10-12T06:16:52.700 回答
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:.

于 2013-10-12T06:43:12.600 回答