打印Python列表

时间:2015-07-11 08:56:04

标签: python list

我必须初始化一个列表L并遵循N行中给出的N个命令。

命令将是以下给出的8个命令中的1个:

append
extend
insert
remove
pop
index
count
sort
reverse

请在下面找到我的代码。我只是个初学者。请原谅我的错误。

示例输入为:

12
insert 0 5
insert 1 10
insert 0 6
print 
remove 6
append 9
append 1
sort 
print
pop
reverse
print

输出应为:

[6, 5, 10]
[1, 5, 9, 10]
[9, 5, 1]

我的代码是:

L = []
L.insert(0,5)
L.insert(1,10)
L.insert(0,6)
print L
L.remove(6)
L.append(9)
L.append(1)
L.sort() 
print L
L.pop()
L.reverse()
print L

即使它以某种方式完成工作,但它并不准确。我该如何简化它?

3 个答案:

答案 0 :(得分:1)

显然问题在于为这种迷你语言编写解释器......类似于

L = []

# read the number of commands
N = int(raw_input())

# execute N commands
for x in xrange(N):
    # read a line and split on spaces
    cmd = raw_input().split()

    # process the command
    if cmd[0] == "insert":
        L.insert(int(cmd[1]), int(cmd[2]))
    elif cmd[0] == "pop":
        L.pop()

    ... implement all the commands ...

    else:
        raise RuntimeError("Unknown command " + repr(cmd))

答案 1 :(得分:1)

我认为练习的目的是从数据中驱动代码,而不是尝试为输入的每一行手动编写代码。

我从输入文本开始并逐行处理。对于每一行,我将您的文本拆分为动作和参数。 Python exec命令可用于执行给定的操作,但您应注意,命令所需的格式对于每个命令都不相同。

input = """12
insert 0 5
insert 1 10
insert 0 6
print 
remove 6
append 9
append 1
sort 
print
pop
reverse
print"""

L = []
allowed_commands = ['append', 'insert', 'pop', 'print', 'remove', 'reverse', 'sort']    

# Read the input in above and split it into a row at a time, skip the count at the start.
for row in input.split("\n")[1:]:
    # For each row, split it into a list of arguments
    cols = [col for col in row.split(" ") if len(col)]
    # The action is taken from the first column
    action = cols[0]

    # Ensure the action is one of the allowed commands      
    if action in allowed_commands:
        arguments = ",".join(cols[1:])

        if action == "count":
            command = "print len(L)"
        elif action == "index":
            command = "print L[%s]" % arguments[0]
        elif action == "print":
            command = "print L"
        else:
            command = "L.%s(%s)" % (action, arguments)

         exec(command)
    else:
        print "'%s' is an unknown command" % action

这为您提供以下输出:

[6, 5, 10]
[1, 5, 9, 10]
[9, 5, 1]

我会留给您将其转换为创建列表并手动输入命令。

注意:使用exec可能非常危险,您必须确保只执行您允许的命令。

答案 2 :(得分:0)

我用这种方式解决了这个黑客等级问题:

if __name__ == '__main__':
    N = int(raw_input())

    list = []

    for i in range(N): 
        option = raw_input().split()
        if option[0] == 'print':
            print(list)
        elif option[0] == 'sort':
            list.sort()
        elif option[0] == 'remove':
            list.remove(int(option[1]))
        elif option[0] == 'append':
            list.append(int(option[1]))
        elif option[0] == 'insert':
            list.insert(int(option[1]),int(option[2]))
        elif option[0] == 'reverse':
            list.reverse()
        elif option[0] == 'pop':
            list.pop()

输出

输入(stdin)

12
insert 0 5
insert 1 10
insert 0 6
print
remove 6
append 9
append 1
sort
print
pop
reverse
print

你的输出(标准输出)

[6, 5, 10]
[1, 5, 9, 10]
[9, 5, 1]

预期产出

[6, 5, 10]
[1, 5, 9, 10]
[9, 5, 1]