【问题标题】:How to rotate a list(not 2D) 90 degree clockwise?如何将列表(不是 2D)顺时针旋转 90 度?
【发布时间】:2018-10-28 20:00:31
【问题描述】:

作为 Python 的初学者,我认为我遇到的最大问题是在可以简单得多的情况下将问题过度复杂化。我还没有找到非二维列表的解决方案,因此我选择询问。

这是我正在尝试做的一个示例:

# Before
alphabet = ["ABCDEFG",
            "HIJKLMN",
            "OPQRSTU"]
# After
rotated_alphabet = ["OHA",
                    "PIB",
                    "QJC",
                    "RKD",
                    "SLE",
                    "TMF",
                    "UNG"]     

到目前为止我做了什么:

length_of_column = len(alphabet)
length_of_row = len(alphabet[0])
temp_list = []

x = -1
for i in range(length_of_column):
    while x < length_of_row-1:
        x += 1
        for row in alphabet:
            temp_list.append(row[x])

temp_list = temp_list[::-1]

输出

print(temp_list)
>>> ['U', 'N', 'G', 'T', 'M', 'F', 'S','L','E','R','K','D','Q','J','C','P','I','B', 'O', 'H', 'A']

我需要以所需的格式制作上面的列表。

-我该怎么做?

-有更简单的方法吗?

【问题讨论】:

  • 你确实有二维数据。字符串像列表一样是可迭代的。您也可以将list 映射到每个字符串上以获得二维列表。并查看如何转置矩阵,因为这基本上就是您在这里尝试做的事情。
  • 致癌,在这种情况下我不能使用二维列表,如问题中所述
  • 他们说你的程序不能在任何地方使用二维列表?即使输入是字符串列表,您也可以随意操作输入。即使你不是,查找如何转置矩阵可能仍然有帮助。您将无法更改列表。您只需要重新分配字符串即可。
  • ["".join([l[i] for l in alphabet][::-1]) for i in range(7)]。连接从创建的列表中生成字符串。 [::-1] 反转列表。

标签: python list


【解决方案1】:

你可以只zip字符串列表,它会逐个字符地生成元组,然后你只需要以相反的顺序加入元组。这里只有一行:

rotated_alphabet = [''.join(list(i)[::-1]) for i in zip(*alphabet)]

【讨论】:

    【解决方案2】:

    @MuhammadAhmad 答案的一个变体是使用 reversed,因为 reversed 适用于可迭代对象,无需转换为列表。

    alphabet = ["ABCDEFG",
                "HIJKLMN",
                "OPQRSTU"]
    
    rotated = [''.join(reversed(a)) for a in zip(*alphabet)]
    print(rotated)
    

    输出

    ['OHA', 'PIB', 'QJC', 'RKD', 'SLE', 'TMF', 'UNG']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-17
      • 2013-05-05
      • 1970-01-01
      • 1970-01-01
      • 2013-09-03
      相关资源
      最近更新 更多