我正在尝试将子列表中的多位数字字符串转换为一位数字整数的子列表。 我想通过简单的列表理解来实现。
原始列表:
# [[], ['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]]
以下线程帮助我实现了这一目标。 List of list, converting all strings to 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]]
有人能指出我正确的方向吗?谢谢。
答案 0 :(得分:2)
一种简单的方法是使用嵌套列表理解来将列表弄平,然后将字符串中的每个字符转换为整数。
您可以在此处修改代码:
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]]
答案 1 :(得分:1)
您可以简单地做到:
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']
。然后,我们将每个数字都映射到一个整数。
答案 2 :(得分:0)
略有不同,假设每个子列表仅包含一个元素:
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]]