鱼C论坛

 找回密码
 立即注册
查看: 1717|回复: 11

[已解决]想打印一个列表[[1,2,3],4,5,6]

[复制链接]
发表于 2023-7-27 20:58:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 奋斗中的鱼 于 2023-7-27 21:05 编辑

我想打印一个列表[[1,2,3],4,5,6](如下),可是他一直不行,求大神指教!
注意,列表是[[1,2,3],4,5,6],不是[[1,2,3],[4,5,6]]!!

  1. >>>lis1 = [[1,2,3],i for i in range(4,7)]
  2. SyntaxError: did you forget parentheses around the comprehension target?
  3. >>>lis1 = [[1,2,3],(i for i in range(4,7))]
  4. >>>lis1
  5. [[1, 2, 3], <generator object <genexpr> at 0x000001D272123B90>]
  6. >>>lis1 = [[1,2,3],i for i in range(4,7)]
  7. SyntaxError: did you forget parentheses around the comprehension target?
  8. >>>lis1 = [1,2,3,i for i in range(4,7)]
  9. SyntaxError: did you forget parentheses around the comprehension target?
  10. >>>lis1 = [([1,2,3],i for i in range(4,7))]
  11. SyntaxError: invalid syntax
复制代码


最佳答案
2023-7-28 11:12:54
本帖最后由 smallwh 于 2023-7-28 11:15 编辑

*是starred expression(星号表达式)
函数传参时,在列表、元组、字符串等前加上*,能将它拆分成单个元素。
  1. >>> print(list(zip(*[[1,2,3],[4,5,6],[7,8,9]])))
  2. [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
  3. >>> print(list(zip([1,2,3],[4,5,6],[7,8,9])))
  4. [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
复制代码

用[]生成列表和函数类似
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-27 20:58:27 | 显示全部楼层
问题出在你的列表表达式中缺少了正确的语法。在Python中,列表表达式需要放在方括号 [] 内,并且如果你想要在列表中包含一个列表,你需要使用括号将其括起来。正确的写法如下:

  1. lis1 = [[1, 2, 3], i for i in range(4, 7)]
复制代码


为了解决这个问题,你可以将列表表达式放在括号内,像这样:

  1. lis1 = [[1, 2, 3], [i for i in range(4, 7)]]
  2. print(lis1)
复制代码


这样就能正确打印出你想要的列表: [[1, 2, 3], [4, 5, 6]] 。

注意,第二个尝试  lis1 = [[1, 2, 3], (i for i in range(4, 7))]  虽然没有报错,但是它实际上将一个生成器对象放入了列表中,所以结果会显示  <generator object <genexpr> at 0x000001D272123B90> ,而不是你想要的列表。所以确保使用列表推导式  [i for i in range(4, 7)]  来创建包含指定元素的列表。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-27 20:58:39 | 显示全部楼层
在Python中,如果要创建一个包含子列表和其他元素的列表,你可以使用以下方法来打印列表[[1,2,3],4,5,6]
  1. lis1 = [[1,2,3], 4, 5, 6]
  2. print(lis1)
复制代码

这将输出[[1,2,3],4,5,6]

在你提供的代码中,你尝试使用列表推导式来创建列表,但出现了一些语法错误。下面是对你提供的不正确代码的一些解释:

1. lis1 = [[1,2,3],i for i in range(4,7)]
   - 这里的问题是列表推导式的语法错误。正确的语法是在列表推导式外部添加括号。你可以使用下面的代码来修正:
   
  1.      lis1 = [[1,2,3], [i for i in range(4,7)]]
  2.      
复制代码

2. lis1 = [[1,2,3],(i for i in range(4,7))]
   - 这个代码创建了一个包含子列表和生成器对象的列表。如果你想要包含生成器的值,你可以使用list()函数将生成器转换为列表,如下所示:
   
  1.      lis1 = [[1,2,3], list(i for i in range(4,7))]
  2.      
复制代码

3. lis1 = [([1,2,3],i for i in range(4,7))]
   - 这个代码创建了一个包含元组的列表,其中元组的第一个元素是列表 [1, 2, 3],第二个元素是生成器对象。如果你想要创建包含生成器值的列表,可以使用上面提到的方法。

希望这些解释能够帮助你理解并解决问题。如果你还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-27 20:59:00 | 显示全部楼层
你的问题出现了一些语法错误。让我来帮你理解和解决这个问题。

在Python中,你想要创建一个列表,包含一个子列表[1, 2, 3]和数字4, 5, 6。你尝试使用了列表解析(list comprehension)来创建这个列表,但是在尝试中出现了一些语法错误。

让我们逐步分析你的尝试:

尝试1:
  1. lis1 = [[1,2,3],i for i in range(4,7)]
复制代码

这段代码中,你在一个[ ]中使用了列表解析,想要创建列表[[1,2,3], 4, 5, 6]。然而,出现了一个语法错误提示:SyntaxError: did you forget parentheses around the comprehension target?

这个错误是因为你没有给列表解析的目标表达式加上括号。在列表解析中,目标表达式应当放在括号中。

尝试2:
  1. lis1 = [[1,2,3],(i for i in range(4,7))]
复制代码

这段代码中,你使用了括号将列表解析的目标表达式(i for i in range(4,7))括起来。这种写法会创建一个生成器对象,而不是你期望的一个包含数字4, 5, 6的子列表。所以,你得到的结果是[[1, 2, 3], <generator object <genexpr> at 0x000001D272123B90>]

尝试3:
  1. lis1 = [[1,2,3],i for i in range(4,7)]
复制代码

这段代码中,你还是没有给列表解析的目标表达式加上括号,导致出现了同样的语法错误。

尝试4:
  1. lis1 = [1,2,3,i for i in range(4,7)]
复制代码

这段代码中,你在一个[ ]中使用了列表解析,不过这次你将[1, 2, 3]i for i in range(4,7)放在了同一级别,而没有将[1, 2, 3]作为子列表。这也导致了语法错误。

正确的做法应该是将子列表[1, 2, 3]放在括号中,然后使用列表解析来生成数字4, 5, 6,并将它们连接到子列表中。下面是正确的代码示例:

  1. lis1 = [[1, 2, 3]] + [i for i in range(4, 7)]
  2. print(lis1)
复制代码


这段代码会输出[[1, 2, 3], 4, 5, 6],符合你的期望。

希望这样的解释能够帮助你明白问题所在,并且给你提供正确的答案。如果你还有其他问题,请随时提问!
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2023-7-27 21:09:13 | 显示全部楼层
生成器是什么?
这些异常是什么意思啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-27 21:12:30 | 显示全部楼层
奋斗中的鱼 发表于 2023-7-27 21:09
生成器是什么?
这些异常是什么意思啊?

生成器(Generator)是一种特殊的迭代器,它是用函数的形式来定义的,使用了  yield  语句而不是  return  语句来返回值。生成器在迭代时会逐个产生值,而不是一次性生成所有值并将它们存储在内存中。这样可以大大节省内存空间,并且在处理大量数据时特别有用。

生成器的定义类似于普通函数,但当函数执行到  yield  语句时,它会暂停执行并返回一个值给调用者,保留了函数的状态。当下一次迭代时,生成器会从上次暂停的地方继续执行,直到遇到下一个  yield  或者函数结束。这样,我们可以逐个产生序列中的元素,而不需要一次性生成整个序列。

例如,以下是一个简单的生成器函数,用于产生从0到n的整数:

  1. def simple_generator(n):
  2.     for i in range(n):
  3.         yield i

  4. # 使用生成器产生序列
  5. gen = simple_generator(5)
  6. for num in gen:
  7.     print(num)
复制代码


输出:
  1. 0
  2. 1
  3. 2
  4. 3
  5. 4
复制代码


关于异常的解释:

1.  SyntaxError: did you forget parentheses around the comprehension target? :这个异常是因为在列表表达式中缺少正确的语法,通常是忘记在列表推导式或生成器表达式周围使用括号。例如,在你的问题中, [[1,2,3],i for i in range(4,7)]  这个表达式就缺少了括号,正确的写法是  [[1, 2, 3], [i for i in range(4, 7)]] 。

2.  SyntaxError: invalid syntax :这个异常是因为表达式的语法错误,Python 无法正确解析这个表达式。在你的问题中, [([1,2,3],i for i in range(4,7))]  这个表达式虽然使用了括号,但在这里,括号将整个列表表达式  (i for i in range(4, 7))  视为一个生成器,而将其与  [1, 2, 3]  放在一起构成一个元组,导致语法错误。应该使用括号将列表表达式括起来,像这样: [[1, 2, 3], [i for i in range(4, 7)]] 。

总结:生成器是一种特殊的迭代器,使用  yield  语句逐个产生值,可以节省内存空间。异常是在代码中发生错误时 Python 给出的提示信息,通常包含错误类型和错误原因,帮助我们找到并解决问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-7-27 21:44:34 | 显示全部楼层
你可以用
  1. [[1,2,3]] + list(i for i in range(4,7))
复制代码

相当于
  1. [[1,2,3]] + [4,5,6]
复制代码

算得
  1. [[1,2,3],4,5,6]
复制代码

与你的要求一致。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-28 09:37:46 | 显示全部楼层
本帖最后由 奋斗中的鱼 于 2023-7-28 09:48 编辑
陶远航 发表于 2023-7-27 20:59
你的问题出现了一些语法错误。让我来帮你理解和解决这个问题。

在Python中,你想要创建一个列表,包含一 ...

  1. lis1 = [[1, 2, 3]] + [i for i in range(4, 7)]
  2. print(lis1)
复制代码

这样可以,但是能不能在一个列表里完成?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-28 10:18:57 | 显示全部楼层
你也可以用
  1. lis1 = [[1,2,3],*[i for i in range(4,7)]]
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-28 10:58:02 | 显示全部楼层

?!
这个*是什么用法?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-28 11:12:54 | 显示全部楼层    本楼为最佳答案   
本帖最后由 smallwh 于 2023-7-28 11:15 编辑

*是starred expression(星号表达式)
函数传参时,在列表、元组、字符串等前加上*,能将它拆分成单个元素。
  1. >>> print(list(zip(*[[1,2,3],[4,5,6],[7,8,9]])))
  2. [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
  3. >>> print(list(zip([1,2,3],[4,5,6],[7,8,9])))
  4. [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
复制代码

用[]生成列表和函数类似
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-28 11:25:47 | 显示全部楼层
smallwh 发表于 2023-7-28 11:12
*是starred expression(星号表达式)
函数传参时,在列表、元组、字符串等前加上*,能将它拆分成单个元素 ...

哇,懂了。谢谢你!
python真奇妙!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-17 22:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表