从在特定位置停止的列表返回新列表

时间:2015-10-15 05:48:36

标签: python

我无法获得代码让我的生活能够发挥作用。

  

在本练习中,您的函数将收到一个参数,一个列表   字符串。您的函数将只生成并返回一个新列表   包括参数中的字符串副本,但不包括   包括字符串kahnkahn将出现在列表中。

预期结果:

words_up_to_kahn(["kirk", "spock", "luke", "charlie", "kahn", "bob"]) -> ["kirk", "spock", "luke", "charlie"]
words_up_to_kahn(["ernie", "kahn", "bert", "teal'c"]) -> ["ernie"]

示例: 它会是这样的吗?

return words[0:kahn]

或类似的东西:

def words_up_to_kahn(words):
    new = ""
    c = 0
    while words[c] != "kahn":
        new = new + words[c]
        c = c + 1
    return new

还是其他什么?

2 个答案:

答案 0 :(得分:0)

这是我认为最简单的解决方案。

条件语句和.index("kahn")是您的朋友:

def up_to_kahn(lst):
    return lst if ("kahn" not in lst) else lst[:lst.index("kahn")]

assert up_to_kahn(["kirk", "spock", "luke", "charlie", "kahn", "bob"]) == \
    ["kirk", "spock", "luke", "charlie"]
assert up_to_kahn(["ernie", "kahn", "bert", "teal'c"]) == ["ernie"]

此外,这显然是从教科书中复制粘贴的。请不要使用Stack Overflow作为家庭作业答案网站。也就是说,这就是答案。

答案 1 :(得分:0)

如果您想要一种替代方法,对于以下itertools解决方案的目的是:

from itertools import takewhile

def words_up_to_kahn(word_list):
    return list(takewhile(lambda x: x != 'kahn', word_list))

print words_up_to_kahn(["kirk", "spock", "luke", "charlie", "kahn", "bob"])
print words_up_to_kahn(["ernie", "kahn", "bert", "teal'c"])

,并提供:

['kirk', 'spock', 'luke', 'charlie']
['ernie']