改变字符串列表中的字母

时间:2017-10-05 00:44:24

标签: python python-3.x

一个例子:

eword_list =  ["a", "is", "bus", "on", "the"]
alter_the_list("A bus station is where a bus stops  A train station is where a train stops  On my desk I have a work station", word_list)
print("1.", word_list)

word_list =  ["a", 'up', "you", "it", "on", "the", 'is']
alter_the_list("It is up to YOU", word_list)
print("2.", word_list)

word_list =  ["easy", "come", "go"]
alter_the_list("Easy come easy go go go", word_list)
print("3.", word_list)

word_list =  ["a", "is", "i", "on"]
alter_the_list("", word_list)
print("4.", word_list)

word_list =  ["a", "is", "i", "on", "the"]
alter_the_list("May your coffee be strong and your Monday be short", word_list)
print("5.", word_list)

def alter_the_list(text, word_list):
    return[text for text in word_list if text in word_list]

我正在尝试删除单词列表中的任何单词,这些单词是文本字符串中的单独单词。在检查单词列表的元素全部是小写之前,应该将文本字符串转换为小写。文本字符串中没有标点符号,并且单词的参数列表中的每个单词都是唯一的。我不知道如何解决它。

输出:

1. ['a', 'is', 'bus', 'on', 'the']
2. ['a', 'up', 'you', 'it', 'on', 'the', 'is']
3. ['easy', 'come', 'go']
4. ['a', 'is', 'i', 'on']
5. ['a', 'is', 'i', 'on', 'the']

预期:

 1. ['the']
 2. ['a', 'on', 'the']
 3. []
 4. ['a', 'is', 'i', 'on']
 5. ['a', 'is', 'i', 'on', 'the']

4 个答案:

答案 0 :(得分:1)

我已经这样做了:

def alter_the_list(text, word_list):
    for word in text.lower().split():
        if word in word_list:
            word_list.remove(word)

text.lower().split()返回text中所有以空格分隔的标记的列表。

关键是您需要更改 word_list。仅返回新的list是不够的;您必须使用Python 3's list methods来就地修改列表。

答案 1 :(得分:1)

如果结果列表的顺序无关紧要,您可以使用集合:

def alter_the_list(text, word_list):
    word_list[:] = set(word_list).difference(text.lower().split())

由于使用word_list

分配到列表切片,此函数将更新word_list[:] = ...

答案 2 :(得分:0)

<强> 1 你的主要问题是你从函数中返回一个值,然后忽略它。您必须以某种方式保存它才能打印出来,例如:

word_list =  ["easy", "come", "go"]
word_out = alter_the_list("Easy come easy go go go", word_list)
print("3.", word_out)

您打印的是原始单词列表,而不是功能结果。

<强> 2 您忽略该函数的 text 参数。您可以在列表推导中将变量名称重用为循环索引。获取不同的变量名称,例如

return[word for word in word_list if word in word_list]

第3 您仍然需要在您构建的列表的逻辑中包含文本。请记住,您正在寻找给定文本中的单词。

最重要的是,学习基本调试。 查看这个可爱的debug博客以获取帮助。

如果不出意外,请学习使用简单的 print 语句来显示变量的值,并跟踪程序的执行情况。

这会让你走向解决方案吗?

答案 3 :(得分:0)

我更喜欢@Simon的回答,但是如果你想在两个列表推导中做到这一点:

def alter_the_list(text, word_list):
    # Pull out all words found in the word list
    c = [w for w in word_list for t in text.split() if t == w]
    # Find the difference of the two lists
    return [w for w in word_list if w not in c]