我在这里有一些代码:
lsp_rows = ['a', 'b', 'c', 'd', 'e', 'b', 'c', 'd', 'e', 'a', 'c',
'd', 'e', 'a', 'b', 'd', 'e', 'a', 'b', 'c', 'e', 'a',
'b', 'c', 'd']
n = int(width/length)
x = [a+b+c+d+e for a,b,c,d,e in zip(*[iter(lsp_rows)]*n)]
目前,这将把我的列表“lsp_rows”分为5组,作为我的n = 5
。但我需要根据“n”进行不同的分割,因为它会根据宽度和长度的值而改变。
因此,如果n为4,我需要将列表拆分为4。
我可以看到问题出在"a+b+c+d+e for a,b,c,d,e"
上,如果没有我的手动输入,我不知道如何进行此更改,有没有办法让我解决这个问题。
如果你们能够尽可能彻底地解释我会非常感激,因为我对python很新。提前致谢!
答案 0 :(得分:2)
我相信这会将你的表达概括为n
项:
import functools
import operator
[functools.reduce(operator.add,abc) for abc in zip(*[iter(x)]*n)]
虽然我还想看一个测试用例。
例如,如果x
是列表列表,则结果是x展平的列表。
数字列表或字符串看起来更好:
In [394]: [functools.reduce(operator.add,abc) for abc in zip(*[iter('abcdefghij')]*4)]
Out[394]: ['abcd', 'efgh']
In [395]: [functools.reduce(operator.add,abc) for abc in zip(*[iter('abcdefghij')]*5)]
Out[395]: ['abcde', 'fghij']
In [396]: [functools.reduce(operator.add,abc) for abc in zip(*[iter(range(20))]*5)]
Out[396]: [10, 35, 60, 85]
包含您的角色列表
In [400]: [functools.reduce(operator.add,abc) for abc in zip(*[iter(lsp_rows)]*5)]
Out[400]: ['abcde', 'bcdea', 'cdeab', 'deabc', 'eabcd']
In [401]: [functools.reduce(operator.add,abc) for abc in zip(*[iter(lsp_rows)]*6)]
Out[401]: ['abcdeb', 'cdeacd', 'eabdea', 'bceabc']
如果项目是字符串,则所有这些导入都可以替换为join
。
答案 1 :(得分:2)
只有字符串才能:
<script src="fontawesome.js"></script>
或稍微简洁一点,可能更少的内存使用:
[''.join(t) for t in zip(*[iter(lsp_rows)]*n)]
@hpaulj提供的答案在一般情况下更有用。
而且,如果您只是尝试生成字符串的循环,那么以下内容将产生相同的输出。
map(''.join, zip(*[iter(lsp_rows)]*n))