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

Python 子列表,将多位数字符串转换为单整数列表,python,string,list,type-conversion,int,Python,String,List,Type Conversion,Int,我试图将子列表中的多位数字符串转换为单位数整数的子列表。 我想通过简单的列表理解来实现这一点 原始清单: # [[], ['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,

我试图将子列表中的多位数字符串转换为单位数整数的子列表。 我想通过简单的列表理解来实现这一点

原始清单:

# [[], ['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]]
下面的线程帮助我走到了这一步。

如果我使用这个嵌套列表,字符串将变成一个整数

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]]
谁能给我指一下正确的方向吗?谢谢。

您只需执行以下操作:

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']
。然后,我们将每个数字映射为一个整数。

您只需执行以下操作:

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'], []]
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]]

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

以下是如何修改代码:

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]]

考虑到每个子列表只包含一个元素,方式略有不同:

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]]

考虑到每个子列表只包含一个元素,方式略有不同:

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]]

只要我理解,他需要子列表的元素是完整的!非常感谢。我知道这不在我的问题中,但不使用地图也能做到这一点吗?这不是非常重要,更多的是好奇。只要我理解他需要子列表中的元素是整型的!非常感谢。我知道这不在我的问题中,但不使用地图也能做到这一点吗?这不是非常重要,更多的是好奇。我看不出有任何理由不使用itertools。您可以从
itertools
导入
chain
并合并两行:
[[int(c)for c in s]for s in chain.from_iterable(mylist)]
我看不出有任何理由不使用itertools。您可以从
itertools
导入
chain
并合并两行:
[[int(c)代表s中的c]代表s中的s.from_iterable(mylist)]