【问题标题】:Creating a list with two different numbers创建具有两个不同数字的列表
【发布时间】:2014-07-24 12:17:45
【问题描述】:

我有两个号码 xyx 例如是 1.5,y 是 1.5 我需要创建一个包含 8 个不同值的列表。

[[0.5,0.5],[0.5,1.5],[0.5,2.5],
[1.5,0.5],[1.5,1.5],[1.5,2.5],
[2.5,0.5],[2.5,1.5],[2.5,2.5]]

[1.5,1.5] #needs to be removed from the above list.

如何在 python 3 中使用不同的 x 和 y 值执行此操作? xy 将始终是 1 到 10 之间的数字。但它们将是 1.5 或 2.5 或 3.5 等。

【问题讨论】:

  • x 和 y 可以是任何浮点数,只要它在 1 到 10 之间吗? IE。 2.452、2.01、6.42。还是永远只有 0.5?
  • 它只以 .5 结尾
  • 所以您有一个 [x, y] 列表,并且您想从列表列表中删除该列表,但前提是 x 和 y 相同?
  • [[x,y] for x,y in l if not x == y]
  • 您可能不应该在帖子中将删除条件描述为“当 x 和 y 相同时”。

标签: python python-3.x


【解决方案1】:

试试这个:

values = [0.5, 1.5, 2.5]
[[x, y] for x in values for y in values if x <> y]

输出:

[[0.5, 1.5], [0.5, 2.5], [1.5, 0.5], [1.5, 2.5], [2.5, 0.5], [2.5, 1.5]]

【讨论】:

  • 我需要一个 len 8 的列表。
  • 您的过滤子句删除了太多。另外,为什么&lt;&gt; 语法?它很旧,很奇怪,在 Python 3 中消失了。
【解决方案2】:

查看this question

从列表中删除:

list_to_remove = [x, y]
list_of_lists = [[0.5,0.5],[0.5,1.5],[0.5,2.5],
                [1.5,0.5],[1.5,1.5],[1.5,2.5],
                [2.5,0.5],[2.5,1.5],[2.5,2.5]]
list_of_lists.remove(list_to_remove)

请记住,如果list_to_remove 不在list_of_lists 中,这将引发异常。要抓住这一点,您需要:

list_to_remove = [x, y]
list_of_lists = [[0.5,0.5],[0.5,1.5],[0.5,2.5],
                [1.5,0.5],[1.5,1.5],[1.5,2.5],
                [2.5,0.5],[2.5,1.5],[2.5,2.5]]

try:
    list_of_lists.remove(list_to_remove)
except:
    print "{0} is not in list_of_lists".format(str(list_to_remove))

【讨论】:

  • 我不需要删除该条目。我需要根据 x 和 y 使用所有这些数字创建的列表。 [x,y] 可以稍后删除。
  • “根据 x 和 y”是什么意思?这个问题与从列表中删除有什么关系吗?
  • 我不需要删除任何内容,我需要创建列表。我想不出一个算法来创建这样的列表。
  • 对不起。我误解了你的问题。也许需要改写?
【解决方案3】:

尝试使用以下列表推导:

items = [[a, b] for a in items for b in items if x != a or y != b]

这样:

>>> x = 1.5
>>> y = 1.5
>>> items = [x-1, x, x+1]
>>> items = [[a, b] for a in items for b in items if x != a or y != b]
>>> items 
[[0.5, 0.5], [0.5, 1.5], [0.5, 2.5], [1.5, 0.5], [1.5, 2.5], [2.5, 0.5], [2.5, 1.5], [2.5, 2.5]]
>>> 

编辑:

或者,如果列表理解过于混乱,您可以将其更改为嵌套的for 循环:

for i in items:
    for j in items:
        if i != x or j != y:
            cp.append([i, j])

运行如下:

>>> x = 1.5
>>> y = 1.5
>>> items = [x-1, x, x+1]
>>> cp = []
>>> for i in items:
...     for j in items:
...         if i != x or j != y:
...             cp.append([i, j])
... 
>>> items = cp
>>> items
[[0.5, 0.5], [0.5, 1.5], [0.5, 2.5], [1.5, 0.5], [1.5, 2.5], [2.5, 0.5], [2.5, 1.5], [2.5, 2.5]]
>>> 

【讨论】:

  • 会有更简单的方法吗?我还没有阅读有关列表理解的内容。
  • 你可以在没有列表理解的情况下把它写出来,(即多行嵌套 for 循环)如果这样更容易理解?
  • @user3670654 ab 是被添加到列表中的。
  • 为什么需要去items=cp
  • @user3670654 你不知道,但现在结果存储在items。但是,您可以删除它并将结果存储在cp
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-13
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
相关资源
最近更新 更多