使用嵌套 for 循环和生成器表达式的 join() 之间的概念差异

Conceptual difference between join() using nested for loop and generator expression

最近,我一直在尝试连接一个数组中存在的元素,该数组本身存在于另一个数组中 (比如数组 1)。使用生成器表达式,我能够成功加入元素。代码如下所示:

array1=[[0,2],[1,1,1],[3,11,1],[2,4,0]]    #Driver list
result=[]                               #Array where the **value** gets appended 
for i in x:                             #for loop to iterate inside array1
    value='.'join(str(j) for j in i)    #join() using generator expression
    result.append(value)
print(result) 

我们得到的输出是:

['0.2', '1.1.1', '3.11.1', '2.4.0']     

我尝试使用嵌套 for 循环编写相同的代码,在 运行 程序之前,我认为它应该提供与上面相同的输出。

:涉及join()的代码使用nested for loop是:

 array1=[[0,2],[1,1,1],[3,11,1],[2,4,0]]    #Driver list
 result=[]
 for i in array1:                        #Nested for loop
     for j in i:
        value='.'.join(str(j))
        result.append(value)
 print(result)

但令我惊讶的是,我得到的输出是

['0', '2', '1', '1', '1', '3', '1.1', '1', '2', '4', '0']

我在 python 中复制了代码和 运行 可视化 以了解ij 的值,但没有获得清晰度。根据我的想法,这两种代码必须以相同的方式工作。

我写的代码在概念上有什么区别吗?如果是这样,我有什么选择,使第二个代码( join() 使用嵌套 for 循环)产生与第一个案例相同的输出。

join 正在获取一个列表并将其转换为字符串,开始时,在列表中的值之间进行分隔,因此如果您只给 join int 或 string 它将 return 与执行相同海峡(价值)。 例如:

".".join(5) 将给出:"5"

".".join([5,8]) 将给出:"5.8"

所以是的,在第一个选项中,您使用一个 for 循环以便进入 i: [0,2], [1,1,1] ... 并且在连接中,您执行名为 list 的操作理解所以它保持相同的列表但是在第二个解决方案中你进入 j: 0,2,1,1,1 .... 正如我们之前提到的那样,将值作为参数的连接与不列出的连接之间存在差异所以这就是您获得此输出的原因,我建议您打印 i 和 j 以了解您作为参数放入连接中的内容:)