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