python - 我不能让 return 和 print (Python) 一样
问题描述
sopa=(["PATO", "BOI", "GATO", "CAO"], ["XPATOW", "GATOPA", "YWBIVZ","ZWCAOB", "ABBOIL"])
def obtem_palavras(sopa):
return sopa[0]
def obtem_grelha(sopa):
return sopa[1]
def encontra_palavras(sopa):
tuplo_palavra = obtem_palavras(sopa)
tuplo_linha = obtem_grelha(sopa)
for item in tuplo_palavra:
for item1 in tuplo_linha:
if item in item1:
return item, tuplo_linha.index(item1), item1.index(item)
我想要的结果是(("PATO",0,1),("BOI",4,2),("GATO",1,0),("CAO",3,2))
通过使用 return 我只得到了第一部分"('PATO', 0, 1)"
通过使用 print 我得到了不同行中的每个信息
PATO 0 1
BOI 4 2
GATO 1 0
CAO 3 2
encontra_palavras(sopa)
tuplo_palavra
必须在and中给我相同的词, tuplo_linha
它在 中tuplo_linha
的位置,以及在 item 中开始的位置我是 Python 新手,我不知道是否有人可以提供帮助。我必须使用 RETURN 而没有 PRINT :) 谢谢
解决方案
您可以使用两种主要方法:您可以在for
循环中构建一个元组,然后将其返回,或者您可以使您的函数成为生成器,然后使用该生成器来构建一个元组。
方法#1:连接到一个空元组
def encontra_palavras(sopa):
result = ()
tuplo_palavra = obtem_palavras(sopa)
tuplo_linha = obtem_grelha(sopa)
for item in tuplo_palavra:
for item1 in tuplo_linha:
if item in item1:
result += ((item, tuplo_linha.index(item1), item1.index(item)),)
return result
这是最简单的方法,但效率不高,因为每次+=
操作都会创建一个新元组。您还可以构建一个列表,在返回之前将其转换为元组。
方法 #2:元组理解(技术上是传递给的生成器表达式tuple
)
def encontra_palavras(sopa):
tuplo_palavra = obtem_palavras(sopa)
tuplo_linha = obtem_grelha(sopa)
return tuple((item, tuplo_linha.index(item1), item1.index(item))
for item in tuplo_palavra
for item1 in tuplo_linha
if item in item1)
方法 #3 生成器
def encontra_palavras(sopa):
result = ()
tuplo_palavra = obtem_palavras(sopa)
tuplo_linha = obtem_grelha(sopa)
for item in tuplo_palavra:
for item1 in tuplo_linha:
if item in item1:
yield item, tuplo_linha.index(item1), item1.index(item)
def encontra_palavras_as_tuple(sopa):
return tuple(encontra_palavras(sopa))
如果您通常只是迭代 的结果encontra_palavras
,则这种方法会更好,因为您可以直接使用生成器而无需将其转换为元组。这意味着您可以遍历项目encontra_palavras
而不将它们存储在内存中(这称为惰性评估)。
推荐阅读
- c# - 是否可以将 XAML 资源字典样式转换为与 c# 等效的样式?
- javascript - 未捕获的 RangeError:超过最大调用堆栈大小 Javascript
- java - 在java中获取绝对路径的最后一个元素有更好的方法吗?
- javascript - 从html响应nodejs中提取文本值
- amazon-web-services - Ubuntu 16.04,Couchbase 服务器,内部 ip 被解析为外部客户端
- .net - 从 C++ 中的 SortedDictionary 迭代时删除项目
- json - 删除 Json 编码额外的括号
- javascript - 向可观察响应添加附加参数
- postgresql - 如何恢复 postgres 备份 - 错误:无法删除当前打开的数据库
- ios - 没有为 WebDriverAgent 项目下载依赖项