我有一个字符串列表
X=['kmo','catlin','mept']
我试图编写一个循环,该循环将返回一个列表,其中包含每个单词的每 N 个字母的列表:
[['k','c','m'], ['m','a','e'],['o','t','p']]
但是我尝试的所有方法都只返回一个列表,其中包含在一个列表中连续返回的所有字母:
['k','m','o','c','a','t','l','i'.....'t']
这是我的代码的一个版本:
def letters(X):
prefix=[]
for i in X:
j=0
while j < len(i):
while j < len(i):
prefix.append(i[j])
break
j+=1
return prefix
我知道我在每个单词中循环,但我不知道如何纠正它。
最佳答案
结果列表的长度似乎是由原始列表中最小字符串的长度决定的。如果确实如此,您可以简单地这样做:
X = ['kmo','catlin','mept']
l = len(min(X, key=len))
res = [[x[i] for x in X] for i in range(l)]
返回:
print(res) # -> [['k', 'c', 'm'], ['m', 'a', 'e'], ['o', 't', 'p']]
或更简单(荣誉@JonClemens):
res = [list(el) for el in zip(*X)]
结果相同。请注意,这是有效的,因为一旦其中一个元素耗尽,zip
就会自动停止迭代。
如果您想填补空白,可以这么说,itertools
可以用它的 zip_longest
方法来支持您。请参阅this了解更多信息。 fillvalue
可以是您选择的任何值;这里用'-'
来演示使用。对于生产代码来说,空字符串 ''
可能是更好的选择。
res = list(zip_longest(*X, fillvalue = '-'))
print(res) # -> [('k', 'c', 'm'), ('m', 'a', 'e'), ('o', 't', 'p'), ('-', 'l', 't'), ('-', 'i', '-'), ('-', 'n', '-')]
关于Python while循环返回第N个字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59613810/