【问题标题】:Add tuples into a list without unpack the tuple将元组添加到列表中而不解包元组
【发布时间】:2018-05-02 11:15:06
【问题描述】:

在 Python 中,我有一些像 b 这样的元组,我想将它们添加到一个空列表中而不解包它们。在这里,我简化了 b 使其重复,实际上,b 中的值会不同,所以 b 将是 b1、b2、b3...

b = ({'a': 1, 'b': 1, 'c': 1}, 'y')
bb = [b, b, b]
print(len(bb))
print(len(bb[0]))
bb

这给了

3 2 Out[204]: [({'a': 1, 'b': 1, 'c': 1}, 'y'),  ({'a': 1, 'b': 1,'c': 1}, 'y'),  ({'a': 1, 'b': 1, 'c': 1}, 'y')]

这就是我想要的。但是由于我现在正在循环中,我不能写 bb = [b, b, b]。我想出的语法会造成我不想要的层次结构。

bb = ()
b = ({'a': 1, 'b': 1, 'c': 1}, 'y')
bb = [bb, b] 
# in reality I loop bb with 3 times in for loop
bb = [bb, b]
bb = [bb, b]
print(len(bb))
print(len(bb[0]))
bb

这给了

[[[(), ({'a': 1, 'b': 1, 'c': 1}, 'y')], ({'a': 1, 'b': 1, 'c': 1},'y')],  ({'a': 1, 'b': 1, 'c': 1}, 'y')]

并不是我想要的。如何循环并达到第一个结果?

【问题讨论】:

  • 警惕[b, b, b] 所做的事情 - 它会在每个元组中创建 字典 的引用副本。

标签: python list loops tuples


【解决方案1】:

只需使用列表推导:

b = ({'a': 1, 'b': 1, 'c': 1}, 'y')
bb = [b for i in range(3)]

输出:

[({'a': 1, 'c': 1, 'b': 1}, 'y'), ({'a': 1, 'c': 1, 'b': 1}, 'y'), ({'a': 1, 'c': 1, 'b': 1}, 'y')]

【讨论】:

  • 谢谢,但实际上,我的 b(s) 每次的值都会不同...可能是 ({'a': 0, 'b': 1, 'c' : 1}, 'y'), ({'a': 1, 'b': 1, 'c': 0}, 'y')...所以您提供的语法不起作用...
  • 你的列表理解是写bb = [b]*3的冗长方式;)
【解决方案2】:

从列表开始,使用append

bb = []
b = ({'a': 1, 'b': 1, 'c': 1}, 'y')
for _ in range(3):
    bb.append(b)

【讨论】:

    猜你喜欢
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多