三元和印刷组合给出了奇怪的结果

时间:2012-12-18 00:50:47

标签: 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
[2] [2] Classical
[3] [3] Epic
[4] [4] Rock
[5] [5] Spoof
[6] [6] Techno & Electronic

如果你愿意,为了看看变量是什么(这不应该是重要的,因为这只是一个概念问题),你可以看到代码的其余部分here

认为它可能是变量,我尝试单独打印语句(没有三元组),它们按照我的预期出现(即没有奇怪的重复)。知道变量很好,我尝试用括号括起字符串(试图阻止字符串混合)但是,因为python按字面解释它们,所以它们作为数组而不是字符串出现。此外,+符号(代替逗号)不起作用,因为python无法组合数据类型。我最后将声明改为

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

它工作正常。

没有那么好的编码,为什么第一个字符串会被打印两次?

2 个答案:

答案 0 :(得分:2)

请允许我为你分解......

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='')

答案 1 :(得分:2)

我不确定为什么它不打印两次:

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='')