【问题标题】:python slice set in list列表中设置的python切片
【发布时间】:2014-08-30 13:47:12
【问题描述】:

我想在一个列表中分割一个集合,但每次我这样做时,我都会得到一个空列表作为回报。

我试图完成的事情(也许有更简单的方法):

  • 我得到了一个集合列表
  • 每套有 5 件商品
  • 我想将一个新集合与列表进行比较(如果该集合已存在于列表中)
  • 集合中的第一项和最后一项与比较无关,因此只有位置 2-4 对搜索已经存在的集合有效

这是我的代码:

result_set = ['1', '2', '3', '4', '5']

result_matrix = []

result_matrix.append(result_set)

切片集合没问题:

print result_set[1:4]

['2', '3', '4']

print result_matrix[:][1:4]

[]

我希望:

[['2', '3', '4']]

【问题讨论】:

  • 您的意思是result_matrix[0][1:4] 而不是result_matrix[:][1:4]?或result_matrix.extend(result_set) 而不是result_matrix.append(result_set)
  • 问题是 result_matrix[:] == 结果矩阵。 result_matrix 只有一个结果集,第 0 个。您要求它从第 4 个结果集到第 4 个结果集,这是一个空集。
  • 我有责任指出这一点:result_set 是一个列表,而不是一个集合。

标签: python list set slice


【解决方案1】:

我认为这是你想要做的:

>>> target_set = ['2', '3', '4']
>>> any([l for l in result_matrix if target_set == l[1:-1]])
True
>>> target_set = ['1', '2', '3']
>>> any([l for l in result_matrix if target_set == l[1:-1]])
False

概括并使其成为一种功能:

def is_set_in_matrix(target_set, matrix):
    return any(True for l in matrix if list(target_set) == l[1:-1])

>>> result_matrix = [['1', '2', '3', '4', '5']]
>>> is_set_in_matrix(['1', '2', '3'], result_matrix)
False
>>> is_set_in_matrix(['2', '3', '4'], result_matrix)
True
# a quirk - it also works with strings...`
>>> s = '234'
>>> is_set_in_matrix(s, result_matrix)
True

请注意,我使用l[1:-1] 在比较中忽略了“集合”的第一个和最后一个元素。如果您需要不同长度的集合,这会更加灵活。

【讨论】:

  • 非常感谢,这正是我所需要的。我只是改变了这个: any([l for l in result_matrix if target_set [1:-1] == l[1:-1]])
【解决方案2】:
>>> result_set = ['1', '2', '3', '4', '5']

>>> print result_set[1:4]
['2', '3', '4']

>>> result_matrix.append(result_set[1:4])
>>> result_matrix
[['2', '3', '4']]

【讨论】:

    【解决方案3】:

    使用result_matrix[:] 返回整个矩阵。您需要将您想要的结果视为数组的一部分。

    >>> result_matrix.append(result_set)
    >>> result_matrix[:]
    [['1', '2', '3', '4']]
    >>> result_matrix[:][0]
    ['1', '2', '3', '4']
    >>> result_matrix[0][1:4]
    ['2', '3', '4']
    

    另外,正如 falsetru 所指出的:

    >>> result_matrix.extend(result_set)
    >>> result_matrix
    ['1', '2', '3', '4']
    >>> result_matrix[1:4]
    ['2', '3', '4']
    

    【讨论】:

      猜你喜欢
      • 2018-08-31
      • 2010-12-14
      • 1970-01-01
      • 1970-01-01
      • 2017-06-24
      • 2015-02-19
      • 2014-05-13
      • 1970-01-01
      相关资源
      最近更新 更多