用列表理解而不是for循环连接2d列表

如何解决用列表理解而不是for循环连接2d列表

嗨,我有一个包含3个元素的2d列表 我使用以下代码连接了一些元素

    list1 = [(1,"hello",3),(1,"excelent",4),(2,"marvelous",3)]
    length = len(list1)
    text = ''
    for irow in range(length):
            number      = list1[irow][0]
            listText    = list1[irow][1]
            ids         = list1[irow][2]
            text += "<tag id = "+ str(ids)+">"+str(listText)+"<\\tag>\r\n"
    
    print(text)

这将产生以下输出

<tag id = 3>hello<\tag> 
<tag id = 4>excelent<\tag> 
<tag id =3>marvelous<\tag>

这是正确的,我的问题是有没有办法使用列表理解来做到这一点,还是有一种更Python的方式来实现相同的结果。

解决方法

使用列表理解:

ee = [(1,"hello",3),(1,"excelent",4),(2,"marvelous",3)]
  
print(["<tag id = "+ str(x[2])+">"+str(x[1])+"<\tag>" for x in ee])

输出:

['<tag id = 3>hello<\tag>','<tag id = 4>excelent<\tag>','<tag id = 3>marvelous<\tag>']  

编辑:

如果您想在标签文本中使用双引号:

print(["<tag id = " + str(x[2])+" >" + str('"' + x[1] + '"') + "<\tag>" for x in ee])

输出:

['<tag id = 3 >"hello"<\tag>','<tag id = 4 >"excelent"<\tag>','<tag id = 3 >"marvelous"<\tag>'] 
,

您可以将整个过程简化为单一形式,但是我建议,合理的折衷方案可能仍然是在列表上使用for循环,但是在for循环目标中,您可以将子列表直接解压缩到相关变量中。在任何情况下,都不需要遍历索引而不是list1的实际内容。使用f字符串(在最新的Python版本中)还将帮助整理事情。

list1 = [(1,3)]

text = ''
for number,listText,ids in list1:
    text += f'<tag id = {ids}>{listText}<\\tag>\r\n'

print(text)

您还可以考虑在此处使用常规的虚拟变量_代替number,因为您实际上并未使用该值:

for _,ids in list1:
,

使用f字符串并解压缩列表推导中的元组元素使此内容清晰易读:

list1 = [
    (1,]
texts = [
    f'<tag id="{ids}">{text}<\\tag>'  # TODO: handle HTML quoting?
    for (number,text,ids) in list1
]
text = "\r\n".join(texts)
,

迭代lambda函数并使用map()

list1 = [(1,3)]
text = map(lambda x: f'<tag id = {x[2]}>{x[1]}<\\tag>',list1)
print('\r\n'.join(list(text)))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?