-3

我找到了一种方法来做我想做的事,但是我想知道是否有一种方法可以将其简化为一条线。

与数字列表相比,我有一个字符串列表列表(有一个答案:[列表列表的总和;返回总和列表)

示例列表:

list = [['T=-40F A=0K', 'T=-15F A=0K', 'T=59F A=0K', 'T=98F A=0K', 'T=120F A=0K'],
 ['T=-40F A=10K','T=-15F A=10K','T=59F A=10K','T=98F A=10K','T=120F A=10K']]

示例输出:

['T=-40F A=0K', 'T=-15F A=0K', 'T=59F A=0K', 'T=98F A=0K', 'T=120F A=0K', 'T=-40F A=10K', 'T=-15F A=10K', 'T=59F A=10K', 'T=98F A=10K', 'T=120F A=10K']

我可以用这种方法加入这些:

new = []
for i in [['T=%.0fF A=%.0fK'%(t,a)for t in TEMP] for a in ALT]:
    new = new + i

有人有什么吗?

至于应用程序,我在 matplotlib 图中添加了一个图例

这真的很简单,而且 sum(list) 的一个很棒的功能

4

4 回答 4

3

使用列表理解

>>> my_list = [['T=-40F A=0K', 'T=-15F A=0K', 'T=59F A=0K', 'T=98F A=0K', 'T=120F A=0K'], ['T=-40F A=10K','T=-15F A=10K','T=59F A=10K','T=98F A=10K','T=120F A=10K']]
>>>
>>> [y for x in my_list for y in x]
['T=-40F A=0K', 'T=-15F A=0K', 'T=59F A=0K', 'T=98F A=0K', 'T=120F A=0K', 'T=-40F A=10K', 'T=-15F A=10K', 'T=59F A=10K', 'T=98F A=10K', 'T=120F A=10K']

而且你不应该使用list你的变量名。

于 2013-07-25T14:08:22.670 回答
3

您想要展平可迭代 -itertools.chain.from_iterable()正是为了这个目的而存在:

>>> data = ...
>>> import itertools
>>> list(itertools.chain.from_iterable(data))
['T=-40F A=0K', 'T=-15F A=0K', 'T=59F A=0K', 'T=98F A=0K', 'T=120F A=0K', 'T=-40F A=10K', 'T=-15F A=10K', 'T=59F A=10K', 'T=98F A=10K', 'T=120F A=10K']

它返回一个迭代器,因此您可以list()需要列表时使用,或者只使用迭代器。

于 2013-07-25T14:09:18.620 回答
2

您可以使用itertools.chain().

>>> testList =[['T=-40F A=0K', 'T=-15F A=0K', 'T=59F A=0K', 'T=98F A=0K', 'T=120F A=0K'],
 ['T=-40F A=10K','T=-15F A=10K','T=59F A=10K','T=98F A=10K','T=120F A=10K']]
>>> 
>>> from itertools import chain
>>> chain(*testList)
<itertools.chain object at 0x02B1E910>
>>> list(chain(*testList))
['T=-40F A=0K', 'T=-15F A=0K', 'T=59F A=0K', 'T=98F A=0K', 'T=120F A=0K', 'T=-40F A=10K', 'T=-15F A=10K', 'T=59F A=10K', 'T=98F A=10K', 'T=120F A=10K']

使用itertools.chain.from_iterable()

>>> list(chain.from_iterable(testList))
['T=-40F A=0K', 'T=-15F A=0K', 'T=59F A=0K', 'T=98F A=0K', 'T=120F A=0K', 'T=-40F A=10K', 'T=-15F A=10K', 'T=59F A=10K', 'T=98F A=10K', 'T=120F A=10K']

PS - 请不要list用作变量名,它会影响内置函数。

于 2013-07-25T14:09:33.423 回答
2

试试itertools.chain.fromiterable() -

from itertools import chain
result = list(chain.from_iterable(your_list))
于 2013-07-25T14:09:45.163 回答