我写了这个函数来读取代表数字的单词列表,并用乘数对1-9位数。
def listpairs(element):
pair = []
for word in enumerate(element):
pair.append(word[1])
if word[1] in denoms:
yield pair
pair.clear()
if word[1] in digits and word[0] == (len(element)-1):
yield pair
当我尝试使用测试字符串时,它会给出:
list(listpairs('two hundred three ten four'.split())
[['four'], ['four'], ['four']]
如果我用print(pair)替换yield,它会给出预期的输出:
['two', 'hundred']
['three', 'ten']
['four']
为什么会这样?屈服是错误的工具吗?
答案 0 :(得分:1)
你一直在产生相同的名单。替换:
pair.clear()
使用:
pair = []
获取新名单。
示例:
from string import digits
denoms = ['hundred', 'ten']
def listpairs(element):
pair = []
for word in enumerate(element):
pair.append(word[1])
if word[1] in denoms:
yield pair
pair.clear()
if word[1] in digits and word[0] == (len(element)-1):
yield pair
list(listpairs('two hundred three ten four'.split()))
给出:
[['four'], ['four']]
可是:
from string import digits
denoms = ['hundred', 'ten']
def listpairs(element):
pair = []
for word in enumerate(element):
pair.append(word[1])
if word[1] in denoms:
yield pair
pair = []
if word[1] in digits and word[0] == (len(element)-1):
yield pair
list(listpairs('two hundred three ten four'.split()))
结果int:
[['two', 'hundred'], ['three', 'ten']]
虽然mylist.clear()
从列表中删除了所有内容,但它仍然是相同的列表。产生相同的列表会导致在输出中多次使用相同的列表。
另一方面,作业mylist = []
创建一个新列表,重用名称mylist
。在此处重复使用该名称是正确的,因为您产生了列表,即它将在函数之外。