查找单词列表是否包含单词的反义词

问题描述 投票:0回答:4

给出诸如['table', 'drawer', 'chair', 'reward', 'radar']的列表

您将如何创建一个函数/ for循环,以返回列表中具有相反含义的单词的列表?我正在尝试仅包含给定单词的第一个实例

因此结果将是:

['drawer', 'radar']

而不是

['drawer','reward', 'radar']

到目前为止,我的代码返回后一个结果:

def find_reversals(lst):

    emptylst = []
    match = []

    for word in lst:
        new = word[::-1]
        emptylst.append(new)

    for i in lst:
        for j in emptylst:
            if i == j:
                match.append(i)

    print('{}'.format(match))
python list for-loop reverse
4个回答
1
投票

您可以在两个索引ij上遍历列表,其中ji开始(只要您想回文数即可)

found = set()
a = ['table', 'drawer', 'chair', 'reward', 'radar']
ret = []
for i in range(len(a)): 
    for j in range(i, len(a)): 
       if a[j][::-1] == a[i]: 
           word = ''.join(sorted(a[i])) 
           if word not in found: 
               found.add(word) 
               ret.append(a[i])

# ret = ['drawer', 'radar']

您重复计算的原因是,您没有跟踪是否找到了某些东西。在这种情况下,我通过set和该单词的排序顺序对其进行了跟踪。


1
投票

您可以执行以下操作:

lst = ['table', 'drawer', 'chair', 'reward', 'radar']
s = set(lst)

result = []
for word in lst:
    reverse = word[::-1]
    if reverse in s:
        result.append(word)
    s.remove(word)

print(result)

输出

['drawer', 'radar']

因为它使用一个集合,所以复杂度为O(n),其中n是列表中元素的数量。


0
投票

似乎您可以使用当前单词的索引来搜索切片。这使列表理解变得非常简单:

l = ['table', 'drawer', 'chair', 'reward', 'radar']

[word for i, word in enumerate(l) if word[::-1] in l[i:]]
# ['drawer', 'radar']

尽管这是O(n ^ 2)算法。


0
投票

用途:

l = ['table', 'drawer', 'chair', 'reward', 'radar']
list_check = list(map(lambda x: ''.join(list(x)[::-1]),l))
#['elbat', 'reward', 'riahc', 'drawer', 'radar']
result = []
for i, val in enumerate(l):
    if val in list_check:
        if list_check.index(val) > i:
            result.append(val)
#['drawer'] 
© www.soinside.com 2019 - 2024. All rights reserved.