列表中的字符串乘以另一个列表中的项目,打印在单独的行上

时间:2014-05-07 17:59:53

标签: python string list

基本上:

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

5 个答案:

答案 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)的解决方案将使用itertoolsmap中的功能:

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