基本上:
list1 = ['x', 'y', 'z']
list2 = [1, 2, 3]
我希望我的输出采用
的形式x
y
y
z
z
z
我有
for i in range(0,len(list1)):
output = list1[i] * list2[i]
print(output)
但那只会让我
x
yy
zzz
答案 0 :(得分:4)
利用print()
功能:
>>> from operator import mul
>>> for x in map(mul, list1, list2):
print(*x, sep='\n')
...
x
y
y
z
z
z
答案 1 :(得分:3)
for item, count in zip(list1, list2):
for _ in range(count):
print(item)
答案 2 :(得分:1)
您每次都会添加相同的字符串,但不会在其间打印。相反,添加另一个for
循环:
list1 = ['x', 'y', 'z']
list2 = [1, 2, 3]
for i in range(len(list1)):
for x in list1[i] * list2[i]:
print(x)
运行如下:
>>> list1 = ['x', 'y', 'z']
>>> list2 = [1, 2, 3]
>>> for i in range(len(list1)):
... for x in list1[i] * list2[i]:
... print(x)
...
x
y
y
z
z
z
>>>
另一个建议是for i in range(0, len(list1)):
而不是for i in range(len(list1))
。 Python自动将其作为range(0, len(list1))
:
>>> range(0, len(list1))
[0, 1, 2]
>>> range(len(list1))
[0, 1, 2]
>>>
但是,如果您要为range()
添加跳转,则需要以包含0
:
>>> range(len(list1), 2)
[]
>>> range(0, len(list1), 2)
[0, 2]
>>>
回答您的评论,使用列表推导来乘以值,然后使用for
循环打印它们:
list1 = ['xx', 'yy', 'zz']
list2 = [1, 2, 3]
list1 = [list1[i]*list2[i] for i in range(len(list1))]
for k in ''.join(list1):
print k
运行如下:
>>> list1 = ['xx', 'yy', 'zz']
>>> list2 = [1, 2, 3]
>>> list1 = [list1[i]*list2[i] for i in range(len(list1))]
>>> for k in ''.join(list1):
... print k
...
x
x
y
y
y
y
z
z
z
z
z
z
>>> list1
['xx', 'yyyy', 'zzzzzz']
>>>
答案 3 :(得分:0)
您的解决方案几乎正确,您只需要在新行中打印output
的每个字符:
for i in range(0,len(list1)):
output = list1[i] * list2[i]
for character in output:
print character
让我们看看我们是否可以将此解决方案更小和更多pythonic 。
在range(0,len(list1)):
中,0
是多余的。range
如果只提供一个参数(结尾),则从0开始,因此您只需使用range(len(list1))
。< / p>
在python中很少需要按索引访问元素。在这种特殊情况下,您应该使用zip
,逐个从两个列表中获取元素:
for a,b in zip(list1, list2):
output = a*b
for character in output:
print character
您可以将str.join
与换行符一起使用,而不是使用for
来打印每个字符:
for a,b in zip(list1, list2):
print "\n".join(a*b)
您可以将这最后一个解决方案作为list comprehension写在一行中:
print "\n".join(["\n".join(a*b) for a,b in zip(list1, list2)])
最后,更高级(可以说是更少pythonic)的解决方案将使用itertools
和map
中的功能:
from itertools import repeat, chain
print "\n".join(chain(*map(repeat, list1, list2)))
答案 4 :(得分:0)
列表理解:
output = [j for i in range(len(list1)) for j in list1[i] * list2[i] ]
for char in output:
print char
x
y
y
z
z
z
一行:
print '\n'.join([j for i in range(len(list1)) for j in list1[i] * list2[i]])
x
y
y
z
z
z