从另一个字符串值中减去一个字符串值

时间:2017-12-13 15:57:57

标签: python

我有两个字符串,分别叫string1string2。两者都由6个不同的数字组成。

我想在Python中做的是从string2中的值中减去string1中的值。我该怎么做呢?我猜这涉及一个for循环,因为我只想从string1中的第一个值中减去string2中的第一个值。并从string1等中的第二个值中减去string2中的第二个值。

所以如果字符串1得到数字

2 5 8 9 6 3

和字符串2得到了数字

2 3 5 9 3 2

我想采取" string1"减去" string2"得到

0 2 3 0 3 1

有什么建议吗?

6 个答案:

答案 0 :(得分:4)

您可以使用split()zip()join()实现此目的:

" ".join([str(int(a) - int(b)) for a, b in zip(s1.split(), s2.split())])

答案 1 :(得分:3)

在@pault答案的基础上,您可以进行以下变体(删除对split()的调用,添加条件):

"".join([str(int(a) - int(b)) if a != ' ' else ' ' for a, b in zip(s1, s2)])

这是更好的做法:

" ".join([str(int(a) - int(b)) for a, b in zip(s1.replace(' ', ''), s2.replace(' ', ''))])

后者可能更具可读性。

答案 2 :(得分:2)

您可以使用正则表达式:

import re
s1 = '2 5 8 9 6 3'
s2 = '2 3 5 9 3 2'
new_string = ' '.join(str(a-b) for a, b in zip(map(int, re.findall('\d+', s1)), map(int, re.findall('\d+', s2))))

输出:

'0 2 3 0 3 1'

答案 3 :(得分:1)

s1 = '2 5 8 9 6 3'
s2 = '2 3 5 9 3 2'
l1 = [int(x) for x in s1.split()]
l2 = [int(x) for x in s2.split()]
r1 = [v1 - v2 for v1, v2 in zip(l1, l2)]

.split()根据空格出现的位置将您的字符串拆分为一个列表(尽管您可以提供一个参数来告诉它拆分其他内容)。

[int(x) for x in s1.split()]是列表理解。它是一个单行循环,为列表中的每个值(拆分字符串)执行填充。我们需要将拆分字符串中的值转换为整数。

zip(l1, l2)获取两个列表中的值并将它们配对。您需要列表具有相同数量的元素才能工作(我们这样做)。从这里开始,我们使用另一个列表理解来获取值对,然后采用差异。

edit(ty danihp):如果您需要将结果作为字符串,则可以使用' '.join([str(x) for x in r1])将列表中的值加入(这会使用空格来分隔列表中的元素)。

答案 4 :(得分:1)

步骤:

s1 = '2 5 8 9 6 3'
s2 = '2 3 5 9 3 2'

s3 = [int(x) for x in s1.split()] # split and convert to int
s4 = [int(x) for x in s2.split()] # split and convert to int

s5 = [] # result
for idx in range(0,len(s3)): # length are equal so this is ok
       s5.append(s3[idx]-s4[idx]) # put into result

rv = " ".join([str(x) for x in s5]) # join result to string

print(s1)
print(s2)
print(s3)
print(s4)
print(s5)
print(rv)

输出:

2 5 8 9 6 3
2 3 5 9 3 2
[2, 5, 8, 9, 6, 3]
[2, 3, 5, 9, 3, 2]
[0, 2, 3, 0, 3, 1]
0 2 3 0 3 1

答案 5 :(得分:0)

由于键入了python,你不能对字符串进行连接:你必须将每个字符串转换为整数列表,然后减去每个元素。

只需一个循环即可完成此操作:

s1 = '2 5 8 9 6 3'
s2 = '2 3 5 9 3 2'

list_diff = [int(x2) - int(x1) for x1, x2 in zip(s1.split(), s2.split())]

# or if you want the result as a string:
list_diff = [str(int(x1) - int(x2)) for x1, x2 in zip(s1.split(), s2.split())]
result = " ".join(list_diff)