Python:将字符串操作到列表

时间:2016-05-03 08:39:36

标签: list python-3.x

问题:

我的在线课程中有一个练习活动,它告诉我操作8个不同方向的字符串并将其放在列表中。 1.从左到右,2。从右到左,3。顶部到顶部,4。从顶部到顶部,5。对角线按钮从左到右,6。对角线右上角到左边,7。对角线按钮向右到左上角,8。对角线左上角到右下角。代码应该与给定文件的任何维度兼容。可以使用reverse方法。

任何帮助将不胜感激。我是这些新手。

要操作的文字(在letters.txt文件中):

A B C D E F
G H I J K L
M N O P Q R 
S T U V W X
Y Z

预期产出:

leftToRight = ['ABCDEF', 'GHIJKL', 'MNOPQR', 'STUVWX', 'YZ']

rightToLeft = ['FEDCBA', 'LKJIHG', 'RQPONM', 'XWVUTS', 'ZY']

topToButtom = ['AGMSY', 'BHNTZ', 'CIOU', 'DJPV', 'EKQW', 'FLRX']

buttomToTop = ['YSMGA', 'ZTNHB', 'UOIC', 'VPJD', 'EKQW', 'FLRX']

bLeftToURight = ['A', 'GB', 'MHC', 'SNID', 'YTOJE', 'ZUPKF', 'VQL', 'WR', 'X']

uRightToBLeft = ['A', 'BG', 'CHM', 'DINS', 'EJOTY', 'FKPUZ', 'LQV', 'RW', 'X']

bRightToULeft = ['Y', 'ZS', 'TM', 'UNG', 'VOHA', 'WPIB', 'XQJC', 'RKD', 'LE', 'F']

uLeftToBRight = ['Y', 'SZ', 'MT', 'GNU', 'AHOV', 'BIPW', 'CJQX', 'DKR', 'EL', 'F']

我的代码到目前为止打开文件并从左到右尝试:

leftToRight = []
openL = open("letters.txt")
letters = openL.read()
letters = letters.replace(" ","")
for line in letters:
    leftToRight.append(line.strip())
print(lefToRight)

打印:

['A', 'B', 'C', 'D', 'E', 'F', '', 'G', 'H', 'I', 'J', 'K', 'L', '', 'M', 'N', 'O', 'P', 'Q', 'R', '', 'S', 'T', 'U', 'V', 'W', 'X', '', 'Y', 'Z']

应打印:

['ABCDEF', 'GHIJKL', 'MNOPQR', 'STUVWX', 'YZ']

1 个答案:

答案 0 :(得分:0)

我会设置包含单个字符的two-dimensional array(用适当的默认值填充任何未占用的字段,可能是0个字符)。然后在两个维度中迭代它(仅限伪代码,正如您刚才提出的想法):

from 0 to height:
    from 0 to width:
        # collect string
    # add it to LR array
    # add reverted string to RL array

类似于垂直方向,高度和宽度互换......

对角线:

from h = 0 to max(height, width):
    from w = 0 to h:
       if h < height && w < width:
          # add matrix[h][w] to string
    #add string to list BLUR
    #add reverted string to URBL

from h = max(height, width) to 0:
    from w = h to max(height, width):
       if h < height && w < width:
          # add matrix[h][w] to string
    #add string to list ULBR
    #add reverted string to BRUL

编辑:根据评论和您的编辑:

您可能会优先逐行阅读,请参阅here。代替

print line;
你会的

leftToRight.append(line.replace(" ", "").strip());

您可能希望在此循环中获取最大字符串长度,以便能够在第二次使用时填充默认值(或检查,如果所有字符串具有相同的长度)。

顺便说一句:leftToRight实际上已经你的二维数组,你可以直接使用它来生成其余部分:rightToLeft:简单地反转所有字符串 - 垂直和对角线:如上所述。