【问题标题】:breaking a list in to lists in python?将列表分解为python中的列表?
【发布时间】:2015-03-09 10:08:39
【问题描述】:

我有以下list 的字符串:

data = ["1","0","1","<>","0","1","0","<>","1","0","1"]

我想要的结果是:

[[1, 0, 1], [0, 1, 0], [1, 0, 1]]

例如一个列表列表,其中每个列表由&lt;&gt; 分隔,结果字符串转换为整数。

【问题讨论】:

  • 你能分享你为实现解决方案所做的努力吗?
  • 鉴于块的大小不一定均匀,我看不出这是如何重复的。
  • @AndrewMagee:确实,我的错误,重新打开。糟糕的格式让我失望。

标签: python arrays list


【解决方案1】:

您可以使用itertools.groupby 在每个&lt;&gt; 上进行有效分区,然后将密钥不是True 的结果组(例如:它是&lt;&gt;)转换为ints,例如:

from itertools import groupby

data = ["1","0","1","<>","0","1","0","<>","1","0","1"]
new_date = [[int(i) for i in g] for k, g in groupby(data, '<>'.__ne__) if k]
# [[1, 0, 1], [0, 1, 0], [1, 0, 1]]

【讨论】:

  • 我测试了你的代码并被这个错误阻止:invalid literal for int() with base 10: '
  • @mahya.khazaee:你的数据中有分数吗?
  • @mahya.khazaee 所以你的数据中有一个&lt; - 例如 - 你发布的样本不能代表你的实际数据?你期望会发生什么?
【解决方案2】:

我建议你更多的函数式解决方案:

data = ["1","0","1","<>","0","1","0","<>","1","0","1"]
reduce(lambda a, b: a[:-1] + [a[-1] + [int(b)]] if b != '<>' else a + [[]], data, [[]])

【讨论】:

    【解决方案3】:

    你也可以试试这个。

    l = ["1","0","1","<>","0","1","0","<>","1","0","1"]
    m = []
    x = []
    j = []
    for i in l:
        if  i == '<>':
            m.append(x)
            x = []
            j = []
        else:
            x.append(int(i))
            j.append(int(i))
    m.append(j)
    print(m)
    

    输出:

    [[1, 0, 1], [0, 1, 0], [1, 0, 1]]
    

    【讨论】:

      【解决方案4】:

      您可以尝试将列表推导与连接和拆分结合使用:

      your_list = [[int(j) for j in i.split()] for i in ' '.join(data).split('<>')]
      

      【讨论】:

      • 如果列表中有一个多于一位的数字,那将失败。
      • 它将如何区分["1", "0", "&lt;&gt;", ...]["10", "&lt;&gt;", ...]
      • 我现在修好了,但问题似乎只与 1 和 0 有关。
      • 这可能行得通,但 boy 这是一种丑陋的方法,而且是一种脆弱的方法。
      • @MartijnPieters 它有多脆弱?它可以正常工作,没有任何失败的可能性。
      猜你喜欢
      • 2016-12-04
      • 1970-01-01
      • 1970-01-01
      • 2018-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-23
      相关资源
      最近更新 更多