如何将上述功能应用于此列表的每个字符串?:
lis = ['hi how are you',
'pretty good',
'the quick brown fox',
'the is quick brown fox play',
'play the quick brown fox']
我试图:
[ request(x) for x in lis ]
我还尝试映射列表中的元素,但它没有用。
答案 0 :(得分:1)
我认为问题在于您的全局变量 lis _ 。您通过所有 lis 条目操纵此操作。您返回理解的每个元素的列表引用,但在以后的解析中继续更新列表。
你得到的是一个相同指针的列表(每个指针都是 lis _ 的引用),每个指针都包含所有处理。
要解决此问题,请使用适当的封装编程实践。使用局部变量,在每次调用时清除它们,并仅返回调用程序中所需的值。
这会让你感动吗?
答案 1 :(得分:0)
这会有帮助吗?
lis = ['hi how are you',
'pretty good',
'the quick brown fox',
'the is quick brown fox play',
'play the quick brown fox']
def requ(text):
# This mimics the request
output = []
for word in text.split():
# This just mimics getting some ID for each word
xyz = "".join(str([ord(x) for x in word])).replace(", ", "")
# This mimics the word root part
if word in ["are", "is"]:
output.append((word, "be", xyz))
else:
output.append((word, word, xyz))
return output
new_lis = [requ(w) for w in lis]
print(new_lis)
输出:
[[('hi', 'hi', '[104105]'), ('how', 'how', '[104111119]'), ('are', 'be', '[97114101]'), ('you', 'you', '[121111117]')], [('pretty', 'pretty', '[112114101116116121]'), ('good', 'good', '[103111111100]')], [('the', 'the', '[116104101]'), ('quick', 'quick', '[11311710599107]'), ('brown', 'brown', '[98114111119110]'), ('fox', 'fox', '[102111120]')], [('the', 'the', '[116104101]'), ('is', 'be', '[105115]'), ('quick', 'quick', '[11311710599107]'), ('brown', 'brown', '[98114111119110]'), ('fox', 'fox', '[102111120]'), ('play', 'play', '[11210897121]')], [('play', 'play', '[11210897121]'), ('the', 'the', '[116104101]'), ('quick', 'quick', '[11311710599107]'), ('brown', 'brown', '[98114111119110]'), ('fox', 'fox', '[102111120]')]]
答案 2 :(得分:0)
你的列表理解是好的,你得到奇怪的输出的原因看起来是请求函数总是返回对全局变量lis_的引用,你继续附加的东西。你应该在convert()中创建lis_作为局部变量。