Python 3.x:使用第二个重复索引的索引

时间:2017-06-21 21:44:50

标签: python list indexing printing

那里有很多类似的帖子,但我找不到与我正在处理的问题直接匹配或导致解决方案的内容。

我想使用列表中包含的重复索引的第二个实例作为另一个列表的索引。当执行该功能时,我想要从列表开头到第一个星号的所有数字到用户代码后的print,第一个星号和第二个星号之间的所有数字在密码后打印,然后全部第二个星号后面的数字,直到在Pin Code后打印的列表末尾。数字的示例数据为"['1', '2', '3', '4', '5', '*', '6', '*', '7', '8', '9', '10', '1']"。用户代码,密码和密码的元素数量可以改变,这就是我试图在星号周围打印的原因。

换句话说,我希望下面的代码为print,假设这些数字存在,User Code: 12345, Pass Code: 6, Pin Code: 789101,所有这些都在一行中。我不希望星号为print

print_string += 'Elapsed Time: ' + str(time) + ', ' + 'User Code: {} '.format(''.join(str(dig) for dig in digit[:digit.index('*')])) + \
                        'Pass Code: {} '.format(''.join(str(dig) for dig in digit[digit.index('*'):digit.index('*')])) + \
                        'Pin Code: {} '.format(''.join(str(dig) for dig in digit[digit.index('*'):]))
print(print_string)

我无法弄清楚如何使它成为连续的星号。如果有更简单的方法来执行此操作,请告诉我!

由于

2 个答案:

答案 0 :(得分:0)

您应该能够结合使用splitenumerate

split会将值转换为列表,您可以使用 enumerate获取当前代码的索引,同时仍然获得该值。

code = '1234*5678*9101'
for i,val in enumerate(code.split('*')):
    if i < len(lst)-1:
        val += "*"
    print ("Code {}: {}".format(i, val))

如果您想在一行上使用打印的end参数,也可以使用打印的print ("Code {}: {},".format(i, val), end='') 参数,使`print看起来像这样:

Code 1: 1234*
Code 2: 5678*
Code 3: 9101
Code 1: 1234*, Code 2: 5678*, Code 3: 9101,

结果:

codeIn = ['1', '2', '3', '4', '5', '*', '6', '*', '7', '8', '9', '10', '1']

codeVals = ("".join(codeIn)).split("*")

titles = ["User Code", "Pass Code", "Pin Code"]
for title, val in zip(titles, codeVals):
    print ("{}: {}".format(title, val)) 

修改:使用新帖子信息更新

带标题的可选打印:

User Code: 12345
Pass Code: 6
Pin Code: 789101

输出:

{{1}}

答案 1 :(得分:0)

在星号(分隔符)上拆分以获取单个字符串。 打印时,将其附加到除最后一项之外的所有项目。

in_str = '1234*5678*9101'
sep = '*'
code_list = in_str.split(sep)

for seq, item in enumerate(code_list):
    term = '*' if seq < len(code_list)-1 else ''
    print "Code" + str(seq) + ':', item + term

输出:

Code0: 1234*
Code1: 5678*
Code2: 9101