我有两个字符串,分别叫string1
和string2
。两者都由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
有什么建议吗?
答案 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)