字符串和列表的连接

时间:2016-09-02 15:28:27

标签: python python-2.7

在下面的python脚本中,它将摄氏度转换为华氏度,但我需要在它们之间和之后加入两个带有字符串的列表

Celsius = [39.2, 36.5, 37.3, 37.8]
fahrenheit = map(lambda x: (float(9)/5)*x + 32, Celsius)
print '\n'.join(str(i) for i in Celsius)+" in Celsius is "+''.join(str(i) for i in fahrenheit )+" in farenheit"

结果就是这个(不是我想要的):

39.2
36.5
37.3
37.8 in Celsius is 102.5697.799.14100.04 in farenheit

我怎样才能做到这一点:

39.2 in Celsius is equivalent to  102.56  in fahrenheit
36.5 in Celsius is equivalent to  97.7  in fahrenheit
37.3 in Celsius is equivalent to  99.14  in fahrenheit
37.8 in Celsius is equivalent to  100.04  in fahrenheit

编辑对我不好 好吧,我原来的代码是

def fahrenheit(T):
    return ((float(9)/5)*T + 32)
def display(c,f):
    print c, "in Celsius is equivalent to ",\
          f, " in fahrenheit" 
Celsius = [39.2, 36.5, 37.3, 37.8]
for c in Celsius:
    display(c,fahrenheit(c))

但由于我需要在3行内

4 个答案:

答案 0 :(得分:8)

您可能最容易进行格式化:

Celsius = [39.2, 36.5, 37.3, 37.8]
def fahrenheit(c):
    return (float(9)/5)*c + 32

template = '{} in Celsius is equivalent to {} in fahrenheit'
print '\n'.join(template.format(c, fahrenheit(c)) for c in Celsius)

修改

如果你真的想要它在3行以下,我们可以内联fahrenheit函数:

Celsius = [39.2, 36.5, 37.3, 37.8]    
template = '{} in Celsius is equivalent to {} in fahrenheit'
print '\n'.join(template.format(c, (float(9)/5)*c + 32) for c in Celsius)

如果你不介意排长队,你也可以内联template并将其缩小到2行......

然而,就我所知,实际上没有任何理由这样做。编写占用更多行的python代码没有任何代价。实际上,每当你试图理解一段非常复杂的代码时,你付出的另一个方向通常会受到惩罚: - )

答案 1 :(得分:2)

为了使用join,您可以在join语句中包含字符串的额外部分。

celsius = [39.2, 36.5, 37.3, 37.8]
fahrenheit = map(lambda x: (float(9)/5)*x + 32, Celsius)
print '\n'.join(str(i) + " in celsius is " + str(j) + "in farenheit" for i, j in zip(celsius, fahrenheit))

答案 2 :(得分:2)

3行:

>>> Celsius = [39.2, 36.5, 37.3, 37.8]
>>> msg = '%g in Celsius is equivalent to %g in Fahrenheit'
>>> print '\n'.join(msg % (c, (9. * c)/5. + 32.) for c in Celsius)

的产率:

  

39.2摄氏度相当于华氏102.56   36.5摄氏度相当于华氏97.7   37.3摄氏度相当于华氏99.14   37.8摄氏度相当于华氏100.04

答案 3 :(得分:0)

您总是可以尝试使用%f格式化浮点数并将输出放在循环中:

for i in range(len(Celsius)):
    print '%f in Celsius is equivalent to %f in fahrenheit' % (Celsius[i], fahrenheit[i])

编辑:根据@mgilson的建议,使用zip会更好,而不是只计算Celsius

for c,f in zip(Celsius, fahrenheit):
    print '%f in Celsius is equivalent to %f in fahrenheit' % (c,f)