繁体   English   中英

子列表,将多位数字字符串转换为单个整数列表

[英]Sublist, converting multi digit string to list of single integers

我正在尝试将子列表中的多位数字字符串转换为一位数字整数的子列表。 我想使用简单的列表理解来实现。

原始清单:

# [[], ['0000000'], ['2200220'], ['2222220'], ['2200220'], ['2000020'], []]

目标清单:

# [[0, 0, 0, 0, 0, 0, 0], [2, 2, 0, 0, 2, 2, 0], [2, 2, 2, 2, 2, 2, 0], [2, 2, 0, 0, 2, 2, 0], [2, 0, 0, 0, 0, 2, 0]]

以下线程帮助我实现了这一目标。 列表清单,将所有字符串转换为int,Python 3

如果我使用此嵌套列表推导,则字符串将变成单个整数。

mylist = [[int(i) for i in s] for s in mylist]

# [[], [0], [2200220], [2222220], [2200220], [2000020], []]

通过使用涉及导入模块的两个步骤,我能够完成我想做的事情,但这并不理想。

import itertools

mylist = list(itertools.chain.from_iterable(mylist))

# ['0000000', '2200220', '2222220', '2200220', '2000020']

mylist_two = [[int(i) for i in str(s)] for s in mylist]

# [[0, 0, 0, 0, 0, 0, 0], [2, 2, 0, 0, 2, 2, 0], [2, 2, 2, 2, 2, 2, 0], [2, 2, 0, 0, 2, 2, 0], [2, 0, 0, 0, 0, 2, 0]]

有人能指出我正确的方向吗? 谢谢。

一种简单的方法是使用嵌套列表理解来将列表展平,然后将字符串中的每个字符转换为整数。

这是修改代码的方法:

mylist = [[], ['0000000'], ['2200220'], ['2222220'], ['2200220'], ['2000020'], []]
print([[int(z) for z in y] for x in mylist for y in x])
#[[0, 0, 0, 0, 0, 0, 0],
# [2, 2, 0, 0, 2, 2, 0],
# [2, 2, 2, 2, 2, 2, 0],
# [2, 2, 0, 0, 2, 2, 0],
# [2, 0, 0, 0, 0, 2, 0]]

您可以简单地执行以下操作:

data = [[], ['0000000'], ['2200220'], ['2222220'], ['2200220'], ['2000020'], []]
out = [list(map(int, list(s[0]))) for s in data if s ]
print(out)

# [[0, 0, 0, 0, 0, 0, 0], [2, 2, 0, 0, 2, 2, 0], [2, 2, 2, 2, 2, 2, 0], [2, 2, 0, 0, 2, 2, 0], [2, 0, 0, 0, 0, 2, 0]]out = [list(s[0]) for s in data if s ]

由于字符串是可迭代的, list('123')将通过迭代'123'的各个字符来创建列表,因此它将返回['1', '2', '3'] 然后,我们将每个数字映射为一个整数。

假设每个子列表仅包含一个元素,则略有不同:

mylist = [[], ['0000000'], ['2200220'], ['2222220'], ['2200220'], ['2000020'], []]

[ [ int(ch) for ch in e[0] ] for e in mylist if len(e) > 0 ]

#=> [[0, 0, 0, 0, 0, 0, 0], [2, 2, 0, 0, 2, 2, 0], [2, 2, 2, 2, 2, 2, 0], [2, 2, 0, 0, 2, 2, 0], [2, 0, 0, 0, 0, 2, 0]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM