【问题标题】:convert a list of list to a list of string (or float)将列表列表转换为字符串列表(或浮点数)
【发布时间】:2016-01-05 04:42:14
【问题描述】:

我有这个:

[[['0'], ['0'], ['0'], ['0'], ['0'], ['0.0178885743420442']], [['0'], ['0'], ['0'], ['0'], ['0.00189664199330356'], ['0.0105739740488949']], [['0'], ['0'], ['0'], ['0'], ['0'], ['0.0131745569045574']]] 

最后,我想得到:

[['0', '0', '0', '0', '0', '0.0178885743420442'], ['0', '0', '0', '0', '0.00189664199330356', '0.0105739740488949'], ['0', '0', '0', '0', '0', '0.0131745569045574']]

我尝试使用 join 但没有任何反应 谢谢

【问题讨论】:

  • 你能展示一下你做了什么吗?
  • 您正在寻找展平列表,并且有很多关于展平的示例,例如stackoverflow.com/questions/406121/…
  • 不,有错误信息:序列项0:预期字符串,找到列表
  • join 仅适用于包含字符串的可迭代对象。它不适用于包含列表的可迭代。它基本上是一个字符串连接函数。
  • @MeiOlya,您最初发布了不同的输入和输出。发布解决方案后,您编辑了整个输入和输出,使所有发布的解决方案无效。

标签: python string list join


【解决方案1】:
>>> from itertools import chain
>>> list(chain(*mylist))
['0', '0', '0', '0', '0', '0.0216939116219239', '0.44748960163182', '1.47290267132899', '2.34321826311047', '2.99520324761532', '3.11538509056595', '3.46600327678834', '2.80910123913849']

【讨论】:

  • 在有人否决这个答案之前:这个人最初问了一个不同的问题,而这个答案是针对那个问题的。现在问题本身已更改,此答案不会回答新问题。
【解决方案2】:

简单地做一个列表理解:

x = [['0'], ['0'], ['0'], ['0'], ['0'], ['0.0216939116219239'], ['0.44748960163182'], ['1.47290267132899'], ['2.34321826311047'], ['2.99520324761532'], ['3.11538509056595'], ['3.46600327678834'], ['2.80910123913849']]
print [j for i in x for j in i]

输出:

['0', '0', '0', '0', '0', '0.0216939116219239', '0.44748960163182', '1.47290267132899', '2.34321826311047', '2.99520324761532', '3.11538509056595', '3.46600327678834', '2.80910123913849']

或者

print [ast.literal_eval(j) for i in x for j in i]  # for list of floats and integers

输出:

[0, 0, 0, 0, 0, 0.0216939116219239, 0.44748960163182, 1.47290267132899, 2.34321826311047, 2.99520324761532, 3.11538509056595, 3.46600327678834, 2.80910123913849]

【讨论】:

  • 嗨,我不明白什么是“ast.literal_eval(j)”
  • ast.literal_eval 安全地评估 python 表达式(文字),并且对于将字符串转换为本机类型很有用,例如ast.literal_eval('0') 将返回一个int,而ast.literal_eval('0.0216939116219239') 将返回一个float
  • @MeiOlya 见上面的评论
【解决方案3】:

这会起作用(获取每个子列表的第一个元素):

[x[0] for x in list]

【讨论】:

  • 我实际上有一个这样的列表:[[['0'], ['0'], ['0'], ['0'], ['0'], [ '0.0178885743420442']], [['0'], ['0'], ['0'], ['0'], ['0.00189664199330356'], ['0.0105739740488949']], [['0'] , ['0'], ['0'], ['0'], ['0'], ['0.0131745569045574']]] 使用循环for,我不能用你的提议,不是是吗?
  • >>> [x[0] for y in list for x in y]
  • 我想要 [['0', '0', '0', '0', '0', '0.0178885743420442'], ['0', '0', '0 ', '0', '0.00189664199330356', '0.0105739740488949'], ['0', '0', '0', '0', '0', '0.0131745569045574']] 但是使用您的代码,所有列表都消失了
【解决方案4】:

您可以将 Python 列表推导式与 itertools 中的 chain.from_iterable 函数结合使用,如下所示:

from itertools import chain

data = [[['0'], ['0'], ['0'], ['0'], ['0'], ['0.0178885743420442']], [['0'], ['0'], ['0'], ['0'], ['0.00189664199330356'], ['0.0105739740488949']], [['0'], ['0'], ['0'], ['0'], ['0'], ['0.0131745569045574']]]

output = [list(chain.from_iterable(x)) for x in data]
print output

将每个子子条目组合成子条目。

如下所示为您提供所需的输出:

[['0', '0', '0', '0', '0', '0.0178885743420442'], ['0', '0', '0', '0', '0.00189664199330356', '0.0105739740488949'], ['0', '0', '0', '0', '0', '0.0131745569045574']]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 2017-09-17
    • 2023-03-25
    • 2019-10-31
    • 2017-09-26
    • 2019-03-31
    • 1970-01-01
    相关资源
    最近更新 更多