2 回答

TA贡献1866条经验 获得超5个赞
您可以遍历字符串中的字符,并遍历 word_list 中的单词。因此,您可以执行以下操作:
def convert_word(a):
return [char2bin(x) for x in a]
result = [convert_word(word) for word in word_list]
使用我自己对 char2bin 的解释:
def char2bin(x):
return list(bin(ord(x)))[2:]
def convert_word(a):
return [char2bin(x) for x in a]
word_list = ['abc','bcd']
[convert_word(word) for word in word_list]
给出结果:
[[['1', '1', '0', '0', '0', '0', '1'],
['1', '1', '0', '0', '0', '1', '0'],
['1', '1', '0', '0', '0', '1', '1']],
[['1', '1', '0', '0', '0', '1', '0'],
['1', '1', '0', '0', '0', '1', '1'],
['1', '1', '0', '0', '1', '0', '0']]]
我相信这是您正在寻找的格式。

TA贡献1744条经验 获得超4个赞
这里有三种基本方法,理解性、功能性和程序性。理解形式被认为是惯用的 Python(或“pythonic”)。
理解
列表推导式可以从任何 Python 表达式构建列表元素,包括其他列表推导式——您可以嵌套它们。
[[char2bin(c) for c in word] for word in ["Hello, W", "orld!---"]]
Python 理解语法具有map()循环和元素filter()的等价物,而不需要像那些内置函数那样的显式 lambda。我们不需要此任务的过滤器。但是因为您已经char2bin()声明了一个函数,所以您已经可以在map()没有 lambda 的情况下使用,就像这样。
[[*map(char2bin, word)] for word in ["Hello, W", "orld!---"]]
上面的版本在理解中混入了一点函数式风格,大概是最Pythonic的了。
在 Python 2 中,您不需要将它放在[*]部件中以使其成为列表,但在 Python 3 中,它map()会生成一个惰性生成器而不是列表。
功能性
您始终可以使用 lambda(匿名函数)在映射和过滤器方面重写推导式。当理解可以使用时,您通常不会在 Python 中使用 lambda。
[*map(lambda word: [*map(char2bin, word)], ["Hello, W", "orld!---"])]
新的 unpack-into-list 语法[*foo]仍然可以用list构造函数来完成。
list(map(lambda word: list(map(char2bin, word), ["Hello, W", "orld!---"]))
以上是一种更函数式的风格,尽管它可以通过使用柯里化和函数组合的函数库更进一步地转向无点风格。但即使是像 Haskell 这样的纯函数式语言也有推导式,这也是 Python 最初从这里得到的。
程序
通过使用显式的 for 循环和累加器(以及有过滤器时的 if 语句),列表推导式总是可以转换为过程式的。这要冗长得多,但对于那些来自像 C 这样的过程语言的人来说会更熟悉,所以你仍然经常在 Python 中看到它。
result = []
for word in ["Hello, W", "orld!---"]:
binchars = []
for c in word:
binchars.append(char2bin(c))
result.append(binchars)
将以上与我的建议进行比较:
[[*map(char2bin, word)] for word in ["Hello, W", "orld!---"]]
添加回答
举报