Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 巨蟒;加入;不同类型的列表列表_Python_List_Python 2.7_Join_List Comprehension - Fatal编程技术网

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]']]
这可不是我想要的

我尝试过的其他事情:

  • 在前面显示的列表中添加另一个for循环

    例如:

    [[["".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]