【问题标题】:Problems while applying a function to a nested list?将函数应用于嵌套列表时出现问题?
【发布时间】:2017-03-07 06:00:39
【问题描述】:

我有以下清单:

lis = ['hi how are you', 'pretty good', 'lore lipsum dolor done', 'done lipsum dolor', 'lipsum dolor done', 'lipsum lore done', 'greetings']

还有以下函数,它使用请求库调用 API:

def my_req(text):

    payload = {'txt': text, 'param1': param1, 
    'param2': param2, 'param3': param3, 'param4': param4}

    r = requests.get('http://api.exmaple.com', params=payload, stream = True)
   try:
     json_data = json.dumps(r.json())
   except JSONDecodeError:
     np.nan

   data = yaml.load(json_data)
   foo(data['index'])
   return foos_list

我想将该函数应用于lis 的每个元素。因此,我尝试了这个:

在:

lis = [my_req(item) for item in [lis]]

【问题讨论】:

  • my_req 采用什么类型的参数?似乎它只需要一个字符串参数。所以请确保你传递给它一个字符串。
  • 函数my_req中的except块是没有用的,因为如果发生异常,函数会继续执行,就像什么都没发生一样。
  • @J.Do... 您需要分析您传递的内容以及原因。列表不同于字符串。强迫不会有帮助。 my_req 返回什么?我没有看到退货声明。
  • lis = [my_req(item) for item in [lis]] 与 lis = [my_req(lis)] 相同。那些支架的东西不应该到处乱扔。你需要从一些简单的例子开始理解列表。

标签: python python-3.x data-structures python-requests nested-lists


【解决方案1】:

根据您的问题描述和示例数据,您的输入是一个字符串列表列表,其中每个子列表的长度为 1,您需要这个:

[my_req(item[0]) for item in lis]

这将返回一个元组列表列表。如果要展平,请使用itertools

list(itertools.chain.from_iterable(my_req(item[0]) for item in lis))

【讨论】:

  • 这就是你的函数my_req 返回的结果,因为你从来没有问过它,所以我不知道它应该做什么以及如何修复它。
  • 这很奇怪,因为当我只测试一个句子时,它会返回一个简单的元组列表......
  • 原始帖子中的函数体是一团糟。例如,该函数返回一个未定义的变量。您必须先修复它,然后再寻求帮助。
  • 我将原始列表修改为字符串列表...在这种情况下是否有帮助?...
  • 首先,您的更改使我的回答无效。所以也祝你修改它好运。其次,正如我所说,你的功能是一团糟。
【解决方案2】:

试试这个:

for i in range(len(lis)):
    lis[i] = [my_req(item) for item in lis[i][0].split()]

【讨论】:

  • 我得到了:AttributeError: 'tuple' object has no attribute 'split'
  • 你在内部列表中存储了什么?不是字符串吗?
  • 简单打印 n 见:print(lis) 或检查类型
  • 此代码将按以下顺序调用 my_req:my_req("hi"),my_req("how"), my_req("are"),my_req("you") 并将结果存储在一个列表。这是你想要的吗?
  • 我想要:my_req(''hi how are you''), my_req(''pretty good"), my_req('lore Lipsum dolor done')....
猜你喜欢
  • 2021-11-03
  • 1970-01-01
  • 2021-07-12
  • 1970-01-01
  • 1970-01-01
  • 2021-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多