【问题标题】:How can i print a list without the brackets? [duplicate]如何打印没有括号的列表? [复制]
【发布时间】:2015-06-12 19:22:20
【问题描述】:

这是一个允许我打印两个列表 cursosArreglo 和 tareasArreglo 的函数,但是当我打印它们时,它们会像这样出现:[['qwert'], ['fisica']] Esta es la lista de tareas y sus prioridades:

[['zxcvb'], ['4'], ['nbvcx'], ['3'], ['tregd'], ['2'], ['bvxx'], ['3']]

如何打印不带括号的两个列表?

def verTareas():
    print("")
    print("Saludos "+nombre+(" a continuacion puede ver su informacion"))
    print("")
    print("Esta es la lista de cursos asignados: ")
    print str(cursosArreglo)
    print("Esta es la lista de tareas y sus prioridades: ")
    print '\n'+str(tareasArreglo)
    print("")
    regresar()

【问题讨论】:

  • 见str.join;可能在这里与生成器表达式或平面地图结合使用。
  • @user2864740 我试过了,但出现以下错误:描述符“join”需要一个“str”对象但收到一个“list”
  • @luispe str.join 在一系列 str[ings] 中工作,您有一系列列表。首先将其转换为字符串序列。 (我认为创建列表的代码可能会意外创建一个元素的内部列表 - 它们看起来没有用,所以也许从源头删除它们?)

标签: python python-2.7


【解决方案1】:

这里有一些无需任何模块或任何东西的代码。

for i in range(len(cursosArreglo)):
    cursosArreglo[i] = "".join(cursosArreglo[i])

print(", ".join(cursosArreglo))

您也可以通过将 tareasArreglo 替换为 cursosArreglo 来运行它。

这首先会遍历您的列表列表,然后将列表中的每个位置替换为其字符串版本,方法是使用str.join(),然后再次使用str.join 以完全加入列表。

也可以压缩成一行。

strCursosArreglo = ", ".join("".join(i) for i in cursosArreglo)

【讨论】:

  • 是否可以通过迭代字符串 cursosArreglo 本身而不是其长度来进一步减少?我的意思是for i in cursosArreglo 而不是for i in range(len(cursosArreglo))。
  • @Matthew0898 可以,但是你必须使用.index。我更喜欢这样的
  • 或者你可以使用 enumerate(), for i, s in enumerate(cursosArreglo): 虽然我不明白你为什么要重新分配到列表中。您绝对可以在没有索引的情况下迭代列表(生成器更好)", ".join("".join(s) for s in cursosArreglo)
  • @achampion 这是一个非常好的主意。这会被视为列表理解还是生成器表达式?
  • 删除 [] 使其成为生成器,即它不会填充整个列表并延迟执行直到需要。
【解决方案2】:

您需要展平列表然后加入它,例如使用嵌套的joins:

>>> data = [['zxcvb'], ['4'], ['nbvcx'], ['3'], ['tregd'], ['2'], ['bvxx'], ['3']]
>>> print ", ".join("".join(s) for s in data)
zxcvb, 4, nbvcx, 3, tregd, 2, bvxx, 3

【讨论】:

    【解决方案3】:

    你也可以使用lambda,下面的代码:

    >>> func= lambda lst: [m for i in lst for m in func(i)] if type(lst) is list else [lst]
    >>> lst = [['zxcvb'], ['4'], ['nbvcx'], ['3'], ['tregd'], ['2'], ['bvxx'], ['3']]
    >>> func(lst)
    ['zxcvb', '4', 'nbvcx', '3', 'tregd', '2', 'bvxx', '3']
    

    或者,

    >>> func=lambda L: sum(map(func, L), []) if isinstance(L, list) else [L]
    >>> func(lst)
    ['zxcvb', '4', 'nbvcx', '3', 'tregd', '2', 'bvxx', '3']
    

    【讨论】:

      【解决方案4】:

      对于列表列表,lst 只需将join 与合适的分隔符一起使用,然后将其展平即可。您可以使用itertools 模块的chain 来展平列表:

      from itertools import chain
      
      lst = [['zxcvb'], ['4'], ['nbvcx'], ['3'], ['tregd'], ['2'], ['bvxx'], ['3']]
      flat_lst =  list(chain.from_iterable(lst))
      print ','.join(flat_lst)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多