如何将列表(非2D)顺时针旋转90度?

时间:2018-10-28 11:21:14

标签: python list

作为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']

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

-我该怎么做?

-有一种更简单的方法吗?

2 个答案:

答案 0 :(得分:1)

您只需zip字符串列表,它将逐个字符地组成元组,然后只需以相反的顺序加入元组。这只是一行:

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

答案 1 :(得分:0)

@MuhammadAhmad答案的一种变体是使用reversed,因为反向处理可迭代对象,而无需转换为列表。

alphabet = ["ABCDEFG",
            "HIJKLMN",
            "OPQRSTU"]

rotated = [''.join(reversed(a)) for a in zip(*alphabet)]
print(rotated)

输出

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