将列表列表中的元素拆分为新元素

时间:2016-09-01 14:15:49

标签: python-2.7

我有一个列表如下:

lofl = [['3_A', '1_E'], ['1_A', '1_C,1_B'], ['1_B', '1_C']]

我想检查每个元素并将第二个元素放入[' 1_A',' 1_C',' 1_B']。所以,我的最终输出是

lofl = [['3_A', '1_E'], ['1_A', '1_C', '1_B'], ['1_B', '1_C']]

我尝试了以下但是没有用。

deflate = [i for i in tre_exr for j in i str(i).split(",")]

我的语法无效。任何人都可以建议问题出在哪里?

提前致谢。

阿伦

3 个答案:

答案 0 :(得分:2)

你非常接近,你只是在列表理解中混合了一个多余的i;另外,最后(即在列表理解的开头),你想要“内部”j,而不是“外部”i。此外,无需转换为str

[ j for i in tre_exr for j in i.split(",") ]

对于整个列表列表,您必须将其包含在另一个列表中:

>>> lofl = [['3_A', '1_E'], ['1_A', '1_C,1_B'], ['1_B', '1_C']]
>>> [[j for i in tre_exr for j in i.split(",")] for tre_exr in lofl]
[['3_A', '1_E'], ['1_A', '1_C', '1_B'], ['1_B', '1_C']]

答案 1 :(得分:1)

我对python有点新意,所以这需要一点点搞清楚!请参阅下文,了解我能想到的最简洁的解决方案。

public class AesCrypto<T> : ICrypto<T>
{
    public string Encrypt(T source, string key)
    {
        var e = Encoding.UTF8;
        var rawData = e.GetBytes(JsonConvert.SerializeObject(source));
        var cipherData = AESThenHMAC.SimpleEncryptWithPassword(rawData, key);
        return Convert.ToBase64String(cipherData);
    }

    public T Decrypt(string source, string key)
    {
        var e = Encoding.UTF8;
        var decryptedBytes = AESThenHMAC.SimpleDecryptWithPassword(Convert.FromBase64String(source), key);
        return JsonConvert.DeserializeObject<T>(e.GetString(decryptedBytes));
    }
}

:)

答案 2 :(得分:1)

如果你想要一个容易阅读的话,我认为这是要走的路。溶液

lofl = [['3_A', '1_E'], ['1_A', '1_C,1_B'], ['1_B', '1_C']]

result = []
for item in lofl:
    x = []
    for i in item:
        x += i.split(',')
    result.append(x)

>>> result
[['3_A', '1_E'], ['1_A', '1_C', '1_B'], ['1_B', '1_C']]