python list获取值验证位置超出范围

时间:2017-06-17 17:42:35

标签: python validation

我是Python的新手。

我有一个Python列表。然后我想在列表的每个位置打印数据,但如果此位置为空,则用空格替换它:

["abcd", "12", "x"] => "a1xb2 c  d  "

我认为要制作一个循环来验证每个位置的数据。但是,当列表中的位置为空时,我无法进行验证,因为我获得了索引超出范围的错误,因此无法进行验证。

如何在列表范围内获取Python中列表的值,该列表可能为空以进行验证。

2 个答案:

答案 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-askhttps://stackoverflow.com/help/mcve