【发布时间】:2010-01-31 20:41:58
【问题描述】:
我这里有这段代码,它应该从列表 n1 和 n2 中删除常用字母。但是当我运行这段代码时,它只运行一次,因为它只从 n1 和 n2 中删除 'a' 而不会删除 'k'。
只是为了澄清这段代码应该始终只适用于 2 个单词。
name1 = "abdjek"
name2 = "doarhsnk"
n1l = list(name1)
n2l = list(name2)
for i in range(len(n1l)):
for j in range(len(n2l)):
if n1l[i] == n2l[j]:
n1l.pop(i)
n2l.pop(j)
n1l.append('0')
n2l.append('1')
好的,等等,它似乎适用于上述 2 个名称,但是当我有 name1 = "naveen" 和 name2 = "darshana" 时它不起作用!
【问题讨论】:
-
当我运行它时,它会产生 n1l = ['b', 'j', 'e', '0', '0', '0'] 和 n2l = [ 'o', 'r', 'h', 's', 'n', '1', '1', '1'].
-
我刚刚将它粘贴到我的 python 解释器中,它似乎做了你想做的事情(删除重复的字母并添加 0 或 1 以保持列表的长度相同)。不过,这不是我会使用的算法。
-
使用集合运算符可以更有效地完成此操作。
-
还有更多 Pythonic 方法可以做到这一点。我要更改的最明显的事情是: 1. 字符串实际上是字符序列,因此您不需要显式创建列表。 2.
for ch in aString:然后使用ch比for i in range(len(aString)):然后使用aString[i]更可取。 -
如果 name1 中有 3 个字母出现,而 name 2 中只有 1 个呢?它们都被删除了吗?