【问题标题】:Subtract two strings in python在python中减去两个字符串
【发布时间】:2016-11-14 15:23:39
【问题描述】:

我应该计算两个不同列表的元素之间的差异。这是我的代码:

import operator
a   = ['5', '35.1', 'FFD']
b    = ['8.5', '11.3', 'AMM']      
difference = [each[0] - each[1] for each in zip(b, a)]
print difference

我需要这个输出:

b-a = ['3.5','-23.8','AMM-FFD']

我收到以下错误:

不支持的操作数类型 -: 'str' 和 'str'

我不想使用像 numpy 或 pandas 这样的任何类

【问题讨论】:

  • 我不确定 5 和 8.5 之间的差异应该是 1.5...
  • 错误很明显,你想过如何解决这个问题吗?
  • 这就是我想问的原因!!

标签: python arrays string list


【解决方案1】:

需要将数字转换为floats,如果元素不能转换为数字,则在它们之间插入'-'。

diffs = []
for i, j in zip(a, b):
    try:
        diffs.append(str(float(j) - float(i)))
    except ValueError:
        diffs.append('-'.join([j, i]))

>>> print(diffs)
['3.5', '-23.8', 'AMM-FFD']

由于 python 是 strong>strong> 类型的(不要与 static 与 dynamic 混淆)它不会隐式地对数值解释执行算术运算如果遇到字符串之间的算术运算符,则为字符串。对于字符串,减号运算符没有 明显 行为,就像加号的明显行为(即连接)一样。您是否希望它从第一个字符串中删除第二个字符串的实例?如果是这样,您已经可以使用更明确的str.replace 方法。或者您是否希望它仅在第一个字符串以第二个字符串结尾时才从第一个字符串中删除第二个字符串?预期的行为不是 100% 明显的,因此 python 作者没有包含对字符串的__sub__ 方法支持。

另外,operator 模块未在您的代码中使用,因此无需导入它。

【讨论】:

    猜你喜欢
    • 2012-10-28
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多