Python 给出奇数结果的三值和打印组合

Python 给出奇数结果的三值和打印组合,python,printing,ternary,Python,Printing,Ternary,我试着用三元组打印字符串,如果某个字符串是真的,则打印出另一个字符串,如果它不是真的(足够简单,对吗?)。它没有错误,看起来也不会引起任何麻烦。然而,在跑步时 print('[',dr+1,']\t',d[dr] if fullpath else '[',dr+1,']\t',d[dr].split("/")[len(d[dr].split("/"))-2], sep='') …它打印出来了 '[',dr+1,']\t' 两次。 例如,它打印以下内容: [1] [1] Accoustic [

我试着用三元组打印字符串,如果某个字符串是真的,则打印出另一个字符串,如果它不是真的(足够简单,对吗?)。它没有错误,看起来也不会引起任何麻烦。然而,在跑步时

print('[',dr+1,']\t',d[dr] if fullpath else '[',dr+1,']\t',d[dr].split("/")[len(d[dr].split("/"))-2], sep='')
…它打印出来了

'[',dr+1,']\t'
两次。 例如,它打印以下内容:

[1] [1] Accoustic
[2] [2] Classical
[3] [3] Epic
[4] [4] Rock
[5] [5] Spoof
[6] [6] Techno & Electronic
如果您愿意,为了查看变量是什么(这不重要,因为这只是一个概念问题),您可以查看代码的其余部分

考虑到可能是变量,我试着分别打印语句(没有三元),结果正如我预期的那样(即没有奇怪的重复)。知道这些变量很好,我尝试用括号括住字符串(以防止字符串混合),但是,由于python逐字解释它们,因此它们显示为数组而不是字符串。另外,+符号(代替逗号)不起作用,因为python不能组合数据类型。最后我把声明改成了

print('[',dr+1,']\t',d[dr]) if fullpath else print('[',dr+1,']\t',d[dr].split("/")[len(d[dr].split("/"))-2], sep='')
而且效果很好


撇开编码不谈,为什么第一个字符串会被打印两次呢?

请允许我为您分析一下

print(('['), (dr+1), (']\t'), (d[dr] if fullpath else '['), (dr+1), (']\t'), (d[dr].split("/")[len(d[dr].split("/"))-2]), sep='')
看到问题了吗

print(*(('[',dr+1,']\t', d[dr]) if fullpath else ('[',dr+1,']\t', d[dr].split("/")[len(d[dr].split("/"))-2])), sep='')

请允许我为您详细介绍一下

print(('['), (dr+1), (']\t'), (d[dr] if fullpath else '['), (dr+1), (']\t'), (d[dr].split("/")[len(d[dr].split("/"))-2]), sep='')
看到问题了吗

print(*(('[',dr+1,']\t', d[dr]) if fullpath else ('[',dr+1,']\t', d[dr].split("/")[len(d[dr].split("/"))-2])), sep='')

我不知道为什么它不会打印两次:

print('[',dr+1,']\t',       #first one
      d[dr] if fullpath else '[',
      dr+1,']\t',           #second one (most of it anyway)
      d[dr].split("/")[len(d[dr].split("/"))-2],
      sep='')
根据
fullpath
,您的语句可能如下所示

print('[',dr+1,']\t',       #first one
      d[dr],dr+1,']\t',     #second one (more or less)
      d[dr].split("/")[len(d[dr].split("/"))-2], 
      sep='')
或者它可能看起来像:

print('[',dr+1,']\t',
      '[',dr+1,']\t',
      d[dr].split("/")[len(d[dr].split("/"))-2], 
      sep='')

我不知道为什么它不会打印两次:

print('[',dr+1,']\t',       #first one
      d[dr] if fullpath else '[',
      dr+1,']\t',           #second one (most of it anyway)
      d[dr].split("/")[len(d[dr].split("/"))-2],
      sep='')
根据
fullpath
,您的语句可能如下所示

print('[',dr+1,']\t',       #first one
      d[dr],dr+1,']\t',     #second one (more or less)
      d[dr].split("/")[len(d[dr].split("/"))-2], 
      sep='')
或者它可能看起来像:

print('[',dr+1,']\t',
      '[',dr+1,']\t',
      d[dr].split("/")[len(d[dr].split("/"))-2], 
      sep='')

啊。。。对我想。我是在假设“如果”和“否则”不包括在分组中。啊。。。对我想。我的假设是“如果”和“否则”不包括在分组中。谢谢你,但另一个答案更容易理解。@Vreality2007——我很高兴你弄明白了。这个对我来说更有意义,但另一个也很好。我将把这个留给那些可能会遇到它的人,他们的思想和我的一样工作。:-)好主意。:)并不是说你的答案是错的,只是括号的分组帮助我理解了为什么它是这样工作的(不仅仅是结果)。谢谢你,但是另一个答案更容易理解。@vrealty2007--我很高兴你弄明白了。这个对我来说更有意义,但另一个也很好。我将把这个留给那些可能会遇到它的人,他们的思想和我的一样工作。:-)好主意。:)并不是说你的答案是错的,只是括号的分组帮助我理解了为什么它是这样工作的(而不仅仅是结果)