我是Python的新手。
我有一个Python列表。然后我想在列表的每个位置打印数据,但如果此位置为空,则用空格替换它:
["abcd", "12", "x"] => "a1xb2 c d "
我认为要制作一个循环来验证每个位置的数据。但是,当列表中的位置为空时,我无法进行验证,因为我获得了索引超出范围的错误,因此无法进行验证。
如何在列表范围内获取Python中列表的值,该列表可能为空以进行验证。
答案 0 :(得分:0)
izip_longest
的 itertools
是您的朋友。它使用最长的iterable(这里是字符串),并用可以设置到所需空间的填充值替换缺少的字符:
from itertools import izip_longest
def f(strings):
return ''.join(
map(lambda x: ''.join(x), izip_longest(*strings, fillvalue=' '))
)
a = ["abcd", "12", "x"]
print(repr(f(a)))
结果:
'a1xb2 c d '
chain
而不是map
和第二join
的变体。
def f(strings):
return ''.join(
chain(*izip_longest(*strings, fillvalue=' '))
)
应用于数组a
的最后一个方法的中间步骤:
from pprint import pprint
a1 = izip_longest(*a, fillvalue=' ')
print('# After izip_longest:')
pprint(list(a1))
print('# After chain:')
a1 = izip_longest(*a, fillvalue=' ')
a2 = chain(*a1)
pprint(list(a2))
a1 = izip_longest(*a, fillvalue=' ')
a2 = chain(*a1)
a3 = ''.join(a2)
print('# Result:')
pprint(a3)
结果:
# After izip_longest:
[('a', '1', 'x'), ('b', '2', ' '), ('c', ' ', ' '), ('d', ' ', ' ')]
# After chain:
['a', '1', 'x', 'b', '2', ' ', 'c', ' ', ' ', 'd', ' ', ' ']
# Result:
'a1xb2 c d '
答案 1 :(得分:0)
由于你是Python的新手,这里的解决方案只使用最简单的Python结构,按照Zen of Python的简单比复杂的更好:
from __future__ import print_function
str_ = ["abcd", "12", "x"]
max_len = max(len(i) for i in str_)
out = ""
for i in range(max_len):
for j in str_:
try:
out += j[i]
except IndexError:
out += " "
print(out)
作为SO的新手,我建议您阅读https://stackoverflow.com/help/on-topic https://stackoverflow.com/questions/how-to-ask和https://stackoverflow.com/help/mcve。