Python 巨蟒;加入;不同类型的列表列表
因此,我有一个列表列表,如下所示:Python 巨蟒;加入;不同类型的列表列表,python,list,python-2.7,join,list-comprehension,Python,List,Python 2.7,Join,List Comprehension,因此,我有一个列表列表,如下所示: my_list = [['hi','Ohio',[1,0.0]],['bye','NewYork',[2,0.0]],['go','Maine',[3,0.0]]] 如您所见,它有3种不同的类型(string、ints和floats) 我需要将子列表“连接”在一起,以输出一个新的列表,格式如下: >>> new_list [['hiOhio10.0'], ['byeNewYork20.0'], ['goMaine30.0']] 为此,
my_list = [['hi','Ohio',[1,0.0]],['bye','NewYork',[2,0.0]],['go','Maine',[3,0.0]]]
如您所见,它有3种不同的类型(string
、ints
和floats
)
我需要将子列表“连接”在一起,以输出一个新的列表,格式如下:
>>> new_list
[['hiOhio10.0'], ['byeNewYork20.0'], ['goMaine30.0']]
为此,我尝试了以下“列表理解”:
>>> new_list = [["".join(["".join(str(a)) for a in b])] for b in mylist]
但这给了我输出:
>>> new_list
[['hiOhio[1, 0.0]'], ['byeNewYork[2, 0.0]'], ['goMaine[3, 0.0]']]
这可不是我想要的
我尝试过的其他事情:
[[["".join(["".join(str(c)) for c in a])]for a in b] for b in my_list]
但这给了我一个错误:
Traceback (most recent call last):
File "<pyshell#88>", line 1, in <module>
[[["".join(["".join(str(c)) for c in a])]for a in b] for b in my_list]
TypeError: 'int' object is not iterable
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
[a中的c的[join([“”.join(str(c))]b中的a]b中的b]
TypeError:“int”对象不可编辑
任何帮助和/或提示都会很好 你可以试试这个列表
>>> [[''.join(i[:2])+''.join(map(str,my_list[0][2]))] for i in my_list]
[['hiOhio10.0'], ['byeNewYork10.0'], ['goMaine10.0']]
假设-子列表始终如所述
-的文档我们可以使用
map
运行lambda
,该lambda将每个项目展平并连接它们,然后连接每个列表中第三个项目的元素:
map(lambda x: ["".join([x[0], x[1], "".join(map(str, x[2]))])], my_list)
结果
[['hiOhio10.0'], ['byeNewYork20.0'], ['goMaine30.0']]
可读性更强,更不容易出错:
def concat(item):
if type(item) is list:
return ''.join([concat(i) for i in item])
# else:
return str(item)
[concat(item) for item in my_list]
假设有一个函数可以展平任意嵌套的iterables,则可以执行以下操作:
[''.join(map(str, flatten(sublist))) for sublist in my_list]
这是我使用的flatte
(改编自:
还有其他一些很好的方法可以将其展平。这些方法通常不会为字符串添加特殊情况,但这可能并不重要。既然可以简单地使用for循环,为什么还要复杂呢
new_list=[''.join(str(y) for x in z for y in x) for z in my_list]
注意-map
比列表理解要慢,只要使用lambda
函数。@logic Anytime!未来一切都会好!我喜欢这样做,因为它完全解决了给定的问题,而不会过于泛化。但是,我认为map+lambda更清楚地表达为列表理解:[“”。join([x[0],x[1] ,“”。加入(映射(str,x[2])]))我的列表中的x]
。理解更短,应该更有效。(当然这会把你的答案变成@BhargavRao的。)@StevenRumbalski你说得对,我真的很喜欢你的(和BhargavRao的)建议比我的答案更好。任何地图+lambda都可以解释为列表理解-这是一种更具python风格的做事方式(根据我所读的内容,也更高效)。更具可读性比简洁性好任何时候,你都会得到我的加号:)这实际上是我从一开始就想做的!谢谢!
new_list=[''.join(str(y) for x in z for y in x) for z in my_list]