【问题标题】:How do I split a list into a list of lists on a specific character in the elements?如何将列表拆分为元素中特定字符的列表列表?
【发布时间】:2011-10-20 04:10:31
【问题描述】:

我对编程比较陌生,并尝试使用 Python 将(非常)长的信息列表放入表中。我安装了HTML.py from Decalage,现在需要将我的列表变成 HTML.py 可以解析的列表。

有没有像这样拆分列表的简单方法:

['(617) 965-2555<br />\nOrganization Name', 'Street Name', 'City', 'Zip code', '(413) 333-2251<br />\nOrg Name 2', 'Address', 'City', 'Zip code 2', '(617) 568-7777</p>\n\n']

进入“\n”处的列表列表?

所以理想的结果应该是这样的:

[ ['Previous info', '(617) 965-2555<br />'] ['Organization name', 'Street name', 'City', 'Zip Code', '(413) 333-2251<br />'] ['Org Name 2', 'Address', 'City', 'Zip Code 2', '(617) 568-7777</p>'] ]

关于将该列表放入有组织的表格(例如 HTML.py)的替代方法的建议也会有所帮助。

【问题讨论】:

    标签: python list split nested-lists


    【解决方案1】:
    >>> a
    ['(617) 965-2555<br />\nOrganization Name', 'Street Name', 'City', 'Zip code', '(413) 333-2251<br />\nOrg Name 2', 'Address', 'City', 'Zip code 2', '(617) 568-7777</p>\n\n']
    >>> [i.split("\n") for i in a]
    [['(617) 965-2555<br />', 'Organization Name'], ['Street Name'], ['City'], ['Zip code'], ['(413) 333-2251<br />', 'Org Name 2'], ['Address'], ['City'], ['Zip code 2'], ['(617) 568-7777</p>', '', '']]
    

    如果你想让它变平:

    >>> import itertools
    >>> list(itertools.chain(*[i.split("\n") for i in a]))
    ['(617) 965-2555<br />', 'Organization Name', 'Street Name', 'City', 'Zip code', '(413) 333-2251<br />', 'Org Name 2', 'Address', 'City', 'Zip code 2', '(617) 568-7777</p>', '', '']
    

    编辑:

    感谢@agf 的评论,我现在明白了:

    >>> a
    ['(617) 965-2555<br />\nOrganization Name', 'Street Name', 'City', 'Zip code', '(413) 333-2251<br />\nOrg Name 2', 'Address', 'City', 'Zip code 2', '(617) 568-7777</p>\n\n']
    >>> [i.split("{}") for i in "{}".join(a).split("\n")]
    [['(617) 965-2555<br />'], ['Organization Name', 'Street Name', 'City', 'Zip code', '(413) 333-2251<br />'], ['Org Name 2', 'Address', 'City', 'Zip code 2', '(617) 568-7777</p>'], [''], ['']]
    

    假设您的原始列表中从未使用过“{}”,否则将其更改为不在您的列表中的内容,|;:; 等。

    您可以轻松过滤输出以删除列表,其中仅包含空字符串:

    filter("".join, result)
    

    【讨论】:

    • 这不是他要求的。他想要一个列表列表,其中每个换行符描绘一个新的子列表。
    • 聪明,但如果你无法预测哪些字符会/不会被使用,很容易损坏。
    • @agf,谢谢,已编辑答案。是的,很容易出错,但我觉得你可以改成+%+'^23+ç.ü,几乎不可能有人进入。或者,您甚至可以随机生成十个字符并使用它。
    • 查看@kindall 对我的问题的评论以获得更简单的扁平化方法。
    • 感谢 utdemir(和 agf)——这非常有效,会让我的一天轻松很多。
    【解决方案2】:

    您当然可以在 \n:

    上轻松转换您的列表
    newlist = [a.split('\n') for a in oldlist]
    

    但是您的结果列表与您的来源列表不够接近,我无法理解...“以前的信息”来自哪里?

    【讨论】:

    • 哎呀,有人打败了我 ;-)
    • 这也不如他所愿。它不会从每一行创建子列表。
    猜你喜欢
    • 1970-01-01
    • 2017-03-14
    • 2018-05-16
    • 2015-12-14
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 2017-04-19
    • 2022-10-07
    相关资源
    最近更新 更多