【发布时间】:2020-01-01 07:50:53
【问题描述】:
我正在尝试使用 set 获取唯一列表,但我的循环方法显示了所有可能性并重复了一些已经存在的列表成员 - 它只是交换它们。我在想也许我应该使用字典 - 只需让一个成员保持不变并避免使用当前的循环方法。
试过了:
a=['hello','mam','dictionary','why','lives','elvis','hey','indicatory']
x = 1
while x < len(a):
for i in a:
if signature(a[x]) == signature(i) and a[x] != i:
anagram=print([a[x],i],end =' ')
x += 1
print(set(anagram))
出现错误:
IndexError: 列表索引超出范围
我遇到问题的代码:
def signature(word):
return ''.join(sorted(word))
a=['hello','mam','dictionary','why','lives','elvis','hey','indicatory']
x = 1
unique_list = []
while x < 8:
for i in a:
if signature(a[x]) == signature(i) and a[x] != i:
y = (a[x], i)
unique_list.append(y)
x += 1
print(list(set(unique_list)))
实际结果: [('lives', 'elvis'), ('elvis', 'lives'), ('indicatory', 'dictionary'), ('dictionary', 'indicatory')]
预期结果: [('lives', 'elvis'), ('indicatory', '字典')]
【问题讨论】:
-
你说得对,字典是自然的选择。您可以创建一个列表,其键是签名,其值是单词列表。
-
列表 a 的元素从 0 到 len(a)-1 枚举。因此,当您的索引 x 达到 len(a) (8) 时,它会生成“列表索引超出范围”错误。
标签: python list set immutability anagram