Python 根据现有列表的字母索引创建列表

Python create list based on letter index of existing list

所以我正在尝试编写一个允许我获取文本文件的脚本, 将布局旋转 90 度并保持所有字母的正确方向(而不是让字母转向侧面)

对,所以如果我有这样的列表:

x = ['the','boy','ate','jam','pie']

如何根据每个列表项中字母的索引位置创建列表。

letters[0] = t,b,a,j,p
letters[1] = h,o,t,a,i
letters[2] = e,y,e,m,e

x = ['tbajp','hotai','eyeme']

我所在的位置:

new_list = []

x = ["the","boy","ate","jam","pie"]

y = len(x)

t = 0
while y > 0:

  z = len(x[0])
  c = 0

  while z > 0:
    print(x[t][c])
    z -= 1
    c += 1

  y -= 1
  t += 1

使用list(zip(*x))的最短方法:

x = ['the','boy','ate','jam','pie']
rotate_list = [''.join(i) for i in list(zip(*x))]
print(rotate_list)

输出:

['tbajp', 'hotai', 'eyeme']

编辑:

您可以使用以下方法反转 rotate_list

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

输出:

['pjabt', 'iatoh', 'emeye']

只需使用zip函数:

x = ['the','boy','ate','jam','pie']
list(zip(*x))
[('t', 'b', 'a', 'j', 'p'), ('h', 'o', 't', 'a', 'i'), ('e', 'y', 'e', 'm', 'e')]

注意:如果字符串的长度不相等,您可能需要使用 itertools.zip_longest 代替

def rotate(input_list: list) -> list:
    print(f"Input List is: {input_list}")
    output_list = []
    for i in range(0, len(input_list)):
        output_string = ""
        for string in input_list:
            if i < len(string):
                output_string += string[i]

        if output_string:
            output_list.append(output_string)

    print(f"Output List is: {output_list}")
    return output_list


rotate(['the', 'boy', 'ate', 'jam', 'pie'])

正如你在上面的代码中看到的,

  • 我们正在遍历 input_list 并从每个字符串中获取索引 i 处的字符。
  • 由于所有字符串的长度可能不同,我们需要确保我们没有尝试获取字符串中不存在的索引。
  • 最后,我们检查是否生成了 output_string,并将其追加到输出列表中。

输出:

#python3 test5.py
Input List is: ['the', 'boy', 'ate', 'jam', 'pie']
Output List is: ['tbajp', 'hotai', 'eyeme']