【问题标题】:Python list manipulation: Add an item to a string element to make it a 2 item listPython 列表操作:将项目添加到字符串元素以使其成为 2 项列表
【发布时间】:2013-08-13 19:44:31
【问题描述】:

假设在 Python 中我有一个如下列表:
a = ['spam', 'eggs', 100, 1234]

现在我有了devon 的值,我想将其添加到“垃圾邮件”以使其本身成为一个列表,结果如下所示: a = [['spam', 'devon'], 'eggs', 100, 1234]

编辑 Drew 提出了一个很好的问题,所以我将对此进行扩展:

devon 之后,我们也收到baloney 并希望结果为 a = [['spam', 'devon', 'baloney'], 'eggs', 100, 1234]

最简单的方法是什么? 如果元素事先是字符串还是列表,是否有一种通用的方法来附加项目?

【问题讨论】:

  • 如果 a 的第一项是列表怎么办?
  • 您确定要这样做吗?也许'spam' 一开始就应该是['spam']
  • @user2357112,它与来自另一个系统的数据有关,并且根据更新,在以后的更新发生之前,元素应该只是字符串还是列表是未知的。简短的回答是肯定的,我敢肯定:)
  • 如果只有1个字符串,为什么不能是一个列表?

标签: python python-3.x


【解决方案1】:

修改a[0]:

>>> a = ['spam', 'eggs', 100, 1234]
>>> a[0] = [a[0], 'Devon']
>>> a
[['spam', 'Devon'], 'eggs', 100, 1234]

对于您更新的问题:

>>> items = ['devon', 'baloney']
>>> a = ['spam', 'eggs', 100, 1234]
>>> a[0] = [a[0]] + items
>>> a
[['spam', 'devon', 'baloney'], 'eggs', 100, 1234]

如果您不确定“垃圾邮件”的位置,请使用列表推导:

>>> a = ['spam', 'eggs', 100, 1234]
>>> [item if item != 'spam' else [item, 'devon'] for item in a]
[['spam', 'devon'], 'eggs', 100, 1234]

【讨论】:

    【解决方案2】:

    试试这个:

    def add_to_first(list, element):
        try:
            list[0].append(element)
        except AttributeError:  # Not a list
            list[0] = [list[0], element]
    
    
    items_string = ['spam', 'eggs', 100, 1234]
    items_list = [['spam'], 'eggs', 100, 1234]
    
    add_to_first(items_string, 'devon')
    add_to_first(items_list, 'devon')
    
    print items_string
    print items_list
    

    我明白了:

    >> [['spam', 'devon'], 'eggs', 100, 1234]
    >> [['spam', 'devon'], 'eggs', 100, 1234]
    

    【讨论】:

    • 谢谢,我们可能只是要创建一个类来处理这种数据类型,因为我们还有更复杂的情况。这应该是一种将所有内容联系在一起的巧妙方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 2022-07-25
    • 1970-01-01
    相关资源
    最近更新 更多