计算两个字符串的字母差异Python

2024-10-06 08:03:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个关于python字符串的练习中遇到了一些问题。在

我有两个不同的列表:

list1= "ABCDEFABCDEF"

以及

^{pr2}$

我需要根据它们的位置比较这两个列表,所以1个字母在一起,然后2…使用最小长度(这里是列表1的长度),并根据字母的不同或相同将它们存储在一个新的变量中。在

identicals=[]
different=[]

我试着编写代码,它似乎找到了相同的代码,但对不同的代码无效,因为它复制了多次。在

for x in list1:
   for y in list2:
       if list1>list2:
           if x==y:
               identicals.append(x)
           if x!=y :
               different.append(x)          
       if list2>list1:
           if y==x:
               identicals.append(y)
           if y!=x:
               different.append(y)

我会很感激你的帮助。在

谢谢。在

编辑:输出结果应如下所示:

identicals=['A']
different=["Z","B","Y","C","X","D","W","E","V",F","A"]

问题是字母A只显示在相同的符号上,而不是不同的字母,即使是F!=A


Tags: 字符串代码in列表forif字母我会
3条回答

因为有一对嵌套的for循环,所以list2中的每一项都要测试list1中的每个项。在

关键思想是迭代parallel中的两个字符串。您可以使用内置的^{} function来实现这一点,它会从您提供给它的每个iterable中生成一个对应项的元组,一旦其中一个iterable的项用完就停止。在

从示例代码来看,您似乎希望从较长的字符串中获取different列表的项。要有效地做到这一点,请在开始循环之前找出哪个字符串的长度比长。在

我重新命名了你的字符串,因为给字符串起一个以“list”开头的名称会令人困惑。在

s1 = "ABCDEFABCDEF"
s2 = "AZBYCXDWEVFABCDEF"

identicals = [] 
different = []

small, large = (s1, s2) if len(s1) <= len(s2) else (s2, s1)

for x, y in zip(small, large):
    if x == y:
        identicals.append(y)
    else:
        different.append(y)

print(identicals)
print(different)

输出

^{pr2}$

我们可以以牺牲可读性为代价使for循环更紧凑。我们将目的地列表放入一个元组中,然后使用相等性测试来选择要附加到该元组中的哪个列表。这是因为False的数值为0,True的数值为1。在

for x, y in zip(small, large):
    (different, identicals)[x == y].append(y)

问题是内环。您正在将列表1中的每个字母与列表2中的所有字母进行比较。在

相反,您应该有一个单循环:

identicals=[] 
different=[]
short_list = list1 if len(list1)<= len(list2) else list2
for i in range(len(short_list):
    if list1[i] == list2[i]:
        identicals.append(list1[i])
    else:
        different.append(short_list[i])  

试试这个

a = "ABCDEFABCDEF"
b = "AZBYCXDWEVFABCDEF"


import numpy
A = numpy.array(list(a))
B = numpy.array(list(b))
common = A[:len(B)] [ (A[:len(B)] == B[:len(A)]) ]
different = A[:len(B)] [ - (A[:len(B)] == B[:len(A)]) ]

>>> list(common)
['A']

>>> list(different)
['B', 'C', 'D', 'E', 'F', 'A', 'B', 'C', 'D', 'E', 'F']

相关问题 更多 >