比较2个字符串A和B中的数字

时间:2015-01-02 01:48:32

标签: python arrays string python-3.x compare

我在python中解决了一个问题。

我有两个带数字的字符串,我需要找出字符串B中的数字是否位于字符串A中。

例如:

a = "5, 7" 
b = "6,5"

A和B可能包含任何数量和数量。

如果字符串B的数量在A中我希望结果为真或假。

不幸的是,我不知道该怎么做。

3 个答案:

答案 0 :(得分:5)

你有字符串,而不是整数,所以你必须先将它们转换为整数:

a_nums = [int(n) for n in a.split(',')]
b_nums = [int(n) for n in b.split(',')]

这会使用list comprehensionstr.split() method调用的每个结果转换为int() function的整数。

要测试两个序列中是否有数字,您可以使用sets,然后测试是否有交叉点:

set(a_nums) & set(b_nums)

如果结果不为空,则序列之间共享数字。由于非空集are considered 'true',在Python中,你将它转换为带有bool()的布尔值:

bool(set(a_nums) & set(b_nums))

到目前为止,集合是测试此类交叉点的最有效方法。

您可以使用生成器表达式和set.intersection() method在一行中更高效地完成所有这些操作:

bool(set(int(n) for n in a.split(',')).intersection(int(n) for n in b.split(',')))
使用map()函数

或者可能更紧凑一点:

bool(set(map(int, a.split(','))).intersection(map(int, b.split(','))))

演示:

>>> a = "5, 7" 
>>> b = "6,5"
>>> bool(set(map(int, a.split(','))).intersection(map(int, b.split(','))))
True

或稍微分解一下:

>>> [int(n) for n in a.split(',')]
[5, 7]
>>> [int(n) for n in b.split(',')]
[6, 5]
>>> set(map(int, a.split(',')))
set([5, 7])
>>> set(map(int, a.split(','))).intersection(map(int, b.split(',')))
set([5])
>>> bool(set(map(int, a.split(','))).intersection(map(int, b.split(','))))
True

答案 1 :(得分:3)

如果数字是整数,要获取与True中的每个数字是否在False中对应的b / a条目列表,请尝试:

a = "5, 7" 
b = "6,5"
A = [int(x) for x in a.split(',')]
B = [int(x) for x in b.split(',')]
c = [x in A for x in B]
print(c)

输出:

[False, True]

要确定b a中的 数字是否在any(c) 中,那么:

True

输出:

{{1}}

答案 2 :(得分:1)

#This should do the trick
a_ints = [int(i) for i in a.split(',')]
b_ints = [int(i) for i in b.split(',')]
for item in b_ints:
    for items in a_ints:
        if item==items: return true
return false