在下面的代码中,我尝试重新运行一个新列表,该列表是通过删除前三个列表项创建的,这些列表项已经与giveHref()函数中的某个轨迹匹配。我试图通过decrementList()函数运行新列表,但收到以下错误:generator object decrementList at 0x104cb8050。为什么我不能再次通过函数运行这个新列表?你知道吗
我也有这样的问题自动完成,直到没有更多的列表项,所以任何意见/建议,这将是有益的。我想这个程序运行一次,并返回所有的HREF匹配递减列表项匹配的API跟踪。你知道吗
import requests
import json
# initial message
message = "if i can't let it go out of my mind"
# split into list
split_message = message.split()
# get lenth of original list
size = len(split_message)
def decrementList(words):
#decrement list by 1 for each try
for w in [ words ] + [ words[:-x] for x in range(1, len(words)) ]:
url = 'http://ws.spotify.com/search/1/track.json?q='
request = requests.get(url + "%20".join(w))
json_dict = json.loads(request.content)
num_results = json_dict['info']['num_results']
if num_results > 0:
num_removed = len(words) - len(w)
track_title = ' '.join(w)
# yield number of list items removed, possible track name that
# is comprised of list items, actual track names from API and new decremented list
# all through generator
for track in json_dict["tracks"]:
if track["name"].lower().startswith(track_title.lower()):
yield num_removed, track, track["name"], w
# finds and returns HREF of first match of track name made from decremented list and API track name
def giveHref():
for num_words_removed, track, track_name, w in decrementList(split_message):
if ' '.join(w) == track_name.lower():
return track['href'], num_words_removed
track['href'], num_words_removed = giveHref()
# creates new list with items from the previously matched track removed
# in this case, first three list items are removed, as they previously matched to a track
def newMessage():
new_message_length = size - num_words_removed
new_message = split_message[new_message_length:size]
return new_message
new_message = newMessage()
decrementList(new_message)
通过使用yield,您将从函数中获得一个生成器对象,而不是一个列表。您必须遍历它,或者如果您想使用它,就将它强制为一个列表。你知道吗
阅读somedocs或看this answer,确保你理解其中的区别。你知道吗
在您的情况下,您可以使用列表压缩来获得您似乎想要的内容。你知道吗
相关问题 更多 >
编程相关推荐