【问题标题】:Python, slicing lists?Python,切片列表?
【发布时间】:2015-02-19 05:20:03
【问题描述】:

我真的需要你的帮助来分割列表。

假设我有一个这样的列表:

field=[[1, 2, 4, 4], [4, 1, 4, 2], [2, 1, 4, 3], [2, 4, 2, 3], [1, 2, 3, 4]]

我必须编写一个函数,它会返回一个如下所示的字符串:

42334
44423
21142
14221

因此,我设法做到了这一点:

def out(field):
    b=''
    for list in field:
        list1=list[::-1]
        b+=''.join((str(sth) for sth in list1))+'\n'
    return b

返回这个:

4421
2414
3412
3242
4321

【问题讨论】:

  • 你能解释一下为什么你需要你所说的输出吗?似乎不合逻辑..
  • @Heskja:大概是矩阵的转置,但它也需要旋转。
  • 我们正在编程:youtube.com/watch?v=xKF6KNIh_mw(没有图形)

标签: python list slice


【解决方案1】:
def out(field):
    b=''
    a=[]
    while len(field[0])>0:
        for list in field:
            a.append(list.pop())
        a.append("\n")
    a="".join(str(x) for x in a)
    return a 
x=[[1, 2, 4, 4], [4, 1, 4, 2], [2, 1, 4, 3], [2, 4, 2, 3], [1, 2, 3, 4]]
print out(x)

【讨论】:

    【解决方案2】:

    您需要将行列表转置到列列表,并反转转置的结果以获得正确的旋转。

    zip(*field) 将行转置为列,reversed() 然后反转结果。结合列表推导,您可以在一个表达式中完成所有操作:

    def out(field):
        return '\n'.join([''.join(map(str, c)) for c in reversed(list(zip(*field)))])
    

    或拼写成显式循环:

    def out(field):
        b = []
        for columns in reversed(list(zip(*field))):
            b.append(''.join(map(str, columns)))
        return '\n'.join(b)
    

    zip() 调用周围的 list() 调用允许我们在 Python 3 中反转迭代器结果;它可以在 Python 2 中删除。

    演示:

    >>> field=[[1, 2, 4, 4], [4, 1, 4, 2], [2, 1, 4, 3], [2, 4, 2, 3], [1, 2, 3, 4]]
    >>> [''.join(map(str, c)) for c in reversed(list(zip(*field)))]
    ['42334', '44423', '21142', '14221']
    >>> '\n'.join([''.join(map(str, c)) for c in reversed(list(zip(*field)))])
    '42334\n44423\n21142\n14221'
    >>> print('\n'.join([''.join(map(str, c)) for c in reversed(list(zip(*field)))]))
    42334
    44423
    21142
    14221
    

    【讨论】:

    • print("\n".join(["".join(map(str,x)) for x in reversed(zip(*field))])), c[::-1] 输出错误
    • 2 个问题:#1 TypeError:reversed() 的参数必须是一个序列#2:输出错误,我需要第一行的 42334,而不是 43324
    • @RokDolinar:你在使用 Python 3 吗?
    • @RokDolinar, reversed(list(zip(*field))
    • 是的,最新版本。在 pycharm 3.4.1 中工作
    猜你喜欢
    • 2017-06-24
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 2014-11-02
    • 1970-01-01
    相关资源
    最近更新 更多