Python 使用给定字符串更改列表
在Python3上,我试图编写一个函数Python 使用给定字符串更改列表,python,string,list,python-3.x,Python,String,List,Python 3.x,在Python3上,我试图编写一个函数find(string\u list,search),它将字符串列表string\u list和单个字符串search作为参数,并返回string\u list中包含给定搜索字符串的所有字符串的列表 所以print(查找(['she','sells','sea','shells','on','the','sea shore','he')) 将打印: ['she', 'shells', 'the'] 以下是我迄今为止所做的尝试: def find(strin
find(string\u list,search)
,它将字符串列表string\u list
和单个字符串search
作为参数,并返回string\u list
中包含给定搜索字符串的所有字符串的列表
所以print(查找(['she','sells','sea','shells','on','the','sea shore','he'))
将打印:
['she', 'shells', 'the']
以下是我迄今为止所做的尝试:
def find(string_list, search):
letters = set(search)
for word in string_list:
if letters & set(word):
return word
return (object in string_list) in search
运行print(查找(['she','sells','sea','shells','on','the','sea shore','he'))
我所期望的=[她,Shell,the]
我得到的=[she]
您可以通过以下方式完成此操作:
def find(string_list, search):
return [s for s in string_list if search in s]
您可以通过以下方式执行此操作:
def find(string_list, search):
return [s for s in string_list if search in s]
代码示例的主要问题是,只能从函数返回一次,此时函数停止执行。这就是函数只返回一个值的原因 如果希望返回多个值,则必须返回容器对象,如
列表
或集
。下面是使用列表时代码的外观:
def find(string_list, search):
letters = set(search)
result = [] # create an empty list
for word in string_list:
if letters & set(word):
# append the word to the end of the list
result.append(word)
return result
这里的if
测试实际上并没有达到问题陈述所要求的效果。由于集合
是一个无序的集合,&
操作只能测试两个集合是否有任何共同元素,而不是它们是否以与输入相同的顺序出现。例如:
>>> letters = set("hello")
>>> word = set("olleh")
>>> word & letters
set(['h', 'e', 'l', 'o'])
如您所见,运算符返回的是一个集合,其元素是两个集合之间的公共元素。由于集合如果包含任何元素,则为True
,因此这实际上是在测试搜索字符串中的所有字母是否出现在给定的项目中,而不是它们是否以给定的顺序一起出现
更好的方法是直接使用in
操作符测试字符串,该操作符(应用于字符串时)按顺序测试一个字符串是否是另一个字符串的子字符串:
def find(string_list, search):
result = []
for word in string_list:
if search in word:
result.append(word)
return result
由于这种迭代列表中的每一项并对其进行测试的模式非常常见,Python提供了一种较短的编写方法,称为a,它允许您在一个表达式中完成整个操作:
def find(string_list, search):
return [word for word in string_list if search in word]
这与前面的示例一样执行,但更简洁。代码示例的主要问题是,只能从函数返回一次,此时函数停止执行。这就是函数只返回一个值的原因 如果希望返回多个值,则必须返回容器对象,如
列表
或集
。下面是使用列表时代码的外观:
def find(string_list, search):
letters = set(search)
result = [] # create an empty list
for word in string_list:
if letters & set(word):
# append the word to the end of the list
result.append(word)
return result
这里的if
测试实际上并没有达到问题陈述所要求的效果。由于集合
是一个无序的集合,&
操作只能测试两个集合是否有任何共同元素,而不是它们是否以与输入相同的顺序出现。例如:
>>> letters = set("hello")
>>> word = set("olleh")
>>> word & letters
set(['h', 'e', 'l', 'o'])
如您所见,运算符返回的是一个集合,其元素是两个集合之间的公共元素。由于集合如果包含任何元素,则为True
,因此这实际上是在测试搜索字符串中的所有字母是否出现在给定的项目中,而不是它们是否以给定的顺序一起出现
更好的方法是直接使用in
操作符测试字符串,该操作符(应用于字符串时)按顺序测试一个字符串是否是另一个字符串的子字符串:
def find(string_list, search):
result = []
for word in string_list:
if search in word:
result.append(word)
return result
由于这种迭代列表中的每一项并对其进行测试的模式非常常见,Python提供了一种较短的编写方法,称为a,它允许您在一个表达式中完成整个操作:
def find(string_list, search):
return [word for word in string_list if search in word]
这与前面的示例一样执行,但更简洁。提示:
filter
。高级提示:任何filter
都可以,列表理解也可以。看起来你是在要求别人为你写一些代码。虽然有人可能会这样做,但最好尝试自己编写函数,然后就这样做时遇到的任何问题提出更具体的问题。到目前为止你试过什么?您在哪里遇到问题?这是我尝试在字符串列表中查找单词的def find(字符串列表,搜索):letters=set(搜索):if letters&set(单词):return word return(字符串列表中的对象)在搜索中我编辑了您的问题以包括您的示例(编辑在队列中,因此可能需要一些时间才能显示)但我不得不猜测它是如何缩进的。如果我弄错了,请编辑您的问题。如果能提供一个示例,说明您是如何运行函数的,以及函数实际产生了什么结果,这也会很有帮助,这与您的预期相反。感谢您花时间改进您的问题。虽然David Robinson已经给了您一个工作示例,但我试图写一个更完整的解释,说明你是如何使用简明列表理解技术的,希望这对以后遇到这个问题的其他人更有启发。提示:filter
。高级提示:任何filter
可以做的事情,列表理解都可以做。看起来你是请他人为您编写一些代码。虽然有人可能会这样做,但最好尝试自己编写函数,然后就您在编写过程中遇到的任何问题提出更具体的问题。到目前为止,您做了哪些尝试?在哪里遇到了问题?这就是我尝试的def find(字符串列表,搜索):letters=set(搜索)对于字符串列表中的单词:if letters&set(单词):return word return(字符串列表中的对象)在搜索中我编辑了您的问题以包括您的示例(编辑在队列中,因此可能需要一段时间才能显示)但我不得不猜测它是如何缩进的。如果我弄错了,请编辑你的问题。如果能提供一个例子,说明你是如何运行函数的,以及函数实际产生了什么结果,与你预期的相反,这也会很有帮助。谢谢