我试图使用三元组打印出一个字符串,如果某些东西是真的,那么其他东西如果不是(简单,对吧?)。它没有错误,似乎不会导致任何麻烦。但是,在跑步时......
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='')
它工作正常。
没有那么好的编码,为什么第一个字符串会被打印两次?
答案 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='')