Python:如何使用

2024-09-24 08:30:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个图例,用于带有可变数据集的绘图。至少有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的新手,在其他方面几乎没有编程经验,所以请容忍我,不要像一些更有经验的用户那样屈尊俯就。你知道吗


Tags: 数据pathinnoneifoselsestr
3条回答

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

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

legend(lines, loc='upper left')

我宁愿这样。你知道吗

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:。你知道吗

因为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')

相关问题 更多 >