【问题标题】:To find what two string have in common [duplicate]找出两个字符串的共同点[重复]
【发布时间】:2022-09-26 06:39:45
【问题描述】:

我有两个字符串:

var_1 = \'ebro EBI 310 TE Temperature data logger\'
var_2 = \'EBRO EBI 310 TE USB-LOGGER\'

我如何(没有正则表达式和长循环)创建第三个变量,其中包含来自第一个和第二个变量的匹配字符?例如,输出将是;

var_3 = \'EBRO EBI 310 TE\'

我能否以相同的方式比较四个或更多变量,并找出字符串中出现在所有变量中的部分以及未出现的部分?

  • 也许您想重新提出您的问题,因为目前还不清楚您在问什么。
  • 您的问题比您可能意识到的要复杂得多。例如,对于abbcdbcdeabcadef 之类的字符串,您会期望得到abcde 的结果吗?还是只是ab?你只关心是否开始与它的共同点? (并且不区分大小写?)第二个字符串总是较短的吗?
  • @Grismar 在这种情况下,它不应该是,因为 abcadef 不包含在 abbcdbcde 中(反之亦然)。这个词(在字符串中)的完整出现是隐含的,不是从我的例子?
  • 您提供了一个示例,该示例与您更广泛的描述相匹配。如果我告诉你“拍所有的白鸟”,给你看一张天鹅的照片,你理解是只拍天鹅的意思吗,还是我给你看一张天鹅的照片来说明更广泛的范围?问题?不,这并不明显。在为代码提供要求时,您应该始终具体。

标签: python


【解决方案1】:

这是一个示例,说明如何比较您在确切位置和任何位置说明的四个或更多变量,

var_1 = 'ebro EBI 310 TE Temperature data logger'
var_2 = 'EBRO EBI 310 TE USB-LOGGER'
var_3 = 'EBRO EBI 310 TE USB-THINGY'
var_4 = 'EBRO EBI 310 TE USB-THUGY'
# create a function to return only the characters that are the same in x amount of string arguments at the same position
def compare(*args):
    # convert args to lower case
    args = [x.lower() for x in args]
    return ''.join([x[0] for x in zip(*args) if all(y== x[0] for y in x)]).upper()

compare_result = compare(var_1, var_2, var_3, var_4)
print(compare_result)

# create a function to return only the characters that are the same in x amount of string arguments at any position
def compare_any(*args):
    # convert args to lower case
    args = [x.lower() for x in args]
    return ''.join([x[0] for x in zip(*args) if any(y.lower() == x[0].lower() for y in x)]).upper()
compare_any_result = compare_any(var_1, var_2, var_3, var_4)
print(compare_any_result)

输出:

EBRO EBI 310 TE 
EBRO EBI 310 TE TEMPERATU

【讨论】:

  • 在这种情况下,如果我只发送两个变量,就会出现一个额外的“R”字符。compare(var_1, var_2) 必须是 EBRO EBI 310 TE 而不是 EBRO EBI 310 TE R
【解决方案2】:

这不是一个很长的循环......

new_string = []
for i, char in enumerate((var_1 if var_1 > var_2 else var_2)): 
  if var_1[i] == var_2[i]: new_string.append(char)
  else: break
new_string = ''.join(new_string)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-24
    • 2014-04-17
    • 2019-09-12
    • 1970-01-01
    • 2017-07-07
    • 2020-05-28
    • 2011-03-23
    相关资源
    最近更新 更多