Python - 移动嵌套列表中的元素

时间:2013-11-18 18:50:24

标签: python list python-3.x nested

def main():
    list1 =[1,2,3,4,5]
    list2 =[0,0,0,0,0]
    list3 =[6,7,8,9,10]

    list=[list1,list2,list3]

    for i in list:
      print(i)

main()

我有这个嵌套列表。 我希望程序询问用户他/她想要移动的号码, 到哪里。

我想对每个数字做一个定义。 每个号码只能移动到某个有效位置。 像6,坐标(2,0),我希望它有两个可能 移动的选择。如果用户说他想将其移动到(1,0)或(0,0),我想要 程序用新的位置打印出一个新的嵌套列表。 如果用户说(0,4)我希望程序打印“不是有效选项。请再试一次。”..然后再试一次..

实施例: 如果用户选择数字6并想将其移动到(1,0),我想要该程序 打印这个:

def main():
    list1 =[1,2,3,4,5]
    list2 =[6,0,0,0,0]
    list3 =[0,7,8,9,10]

    list=[list1,list2,list3]

    for i in list:
      print(i)

main()

我该怎么做?

编辑:

我不知道如何让不同的数字移动到不同的位置。数字7一次只能垂直移动一个坐标。数字6一次只能垂直移动一个或两个坐标。

1 个答案:

答案 0 :(得分:0)

因此,您希望用户通过坐标从矩阵中选择一个元素,首先用户选择一个坐标,然后选择另一个仅在与第一个坐标相邻时才有效的坐标。这对我有用,虽然您应该事先检查您的坐标系统是否清晰(也许您可以查看pprint或其他工具来打印列表列表,如矩阵)。

def main():
    list1 =[1,2,3,4,5]
    list2 =[0,0,0,0,0]
    list3 =[6,7,8,9,10]
    list2d = [list1, list2, list3]

    print(list2d)
    trade(list2d)

def trade(list2d):
    pos1 = raw_input('Enter the coordinates of the number you want to move.')
    pos1 = map(int,pos1)
    pos2 = raw_input('Enter the coordinates of the new position.')
    pos2 = map(int,pos2)
    if (abs(pos1[0]-pos2[0]) == 1 and abs(pos1[1]-pos2[2]) == 0) or (abs(pos1[0]-pos2[0]) == 0 and abs(pos1[1]-pos2[1]) == 1):
        firstval = list2d[pos1[0]][pos1[1]]
        secondval = list2d[pos2[0]][pos2[1]]
        list2d[pos1[0]][pos1[1]] = secondval
        list2d[pos2[0]][pos2[1]] = firstval
        print(list2d)
        trade(list2d)
    else:
        print("Not a valid option. Please try again.")
        trade(list2d)


main()