【问题标题】:Slicing string in list python using a separator python [duplicate]使用分隔符python在列表python中切片字符串[重复]
【发布时间】:2021-03-18 05:46:16
【问题描述】:

是否可以使用分隔符对列表中的字符串进行切片?

当我使用sep = ":" 并尝试切片时,我收到一条错误消息,提示只能使用数字索引进行切片。我想在: 分隔符上对每个字符串进行切片。

['Brandon:5', 'Patrick:18.9', 'Brandon:xyz', 'Jack:', 'Sarah:825', 'Jack:45', 'Brandon:10', 'James:3.25', 'James:125.62', 'Sarah:2.43', 'Brandon:100.5']

text2 =  ['Brandon:5', 'Patrick:18.9', 'Brandon:xyz', 'Jack:', 'Sarah:825', 'Jack:45', 'Brandon:10', 'James:3.25', 'James:125.62', 'Sarah:2.43', 'Brandon:100.5']

sep = ':'

text3 = [w[:sep] for w in text2]

输出:

TypeError: slice indices must be integers or None or have an __index__ method

【问题讨论】:

  • 请在问题中包含您的代码和完整的错误回溯。
  • 预期输出是什么?
  • 预期输出是附加 2 个列表。 1 带有名称,第二个带有分隔符后的值:
  • 请完整分享您目前编写的代码。

标签: python list


【解决方案1】:

您可以使用str.split() 拆分列表推导中的每个字符串。这将为您提供一个列表列表。您可以比zip this 并将其解压缩到单独的列表中:

l = ['Brandon:5', 'Patrick:18.9', 'Brandon:xyz', 'Jack:', 'Sarah:825', 'Jack:45', 'Brandon:10', 'James:3.25', 'James:125.62', 'Sarah:2.43', 'Brandon:100.5']

names, data = zip(*(s.split(':') for s in l))

names 将是:

('Brandon',
 'Patrick',
 'Brandon',
 'Jack',
 'Sarah',
 'Jack',
 'Brandon',
 'James',
 'James',
 'Sarah',
 'Brandon')

data 将是:

('5', '18.9', 'xyz', '', '825', '45', '10', '3.25', '125.62', '2.43', '100.5')

【讨论】:

    【解决方案2】:

    更新

    您的代码引发错误的原因是您需要将字符的 index 作为切片传递,而字符本身:

    text2 =  ['Brandon:5', 'Patrick:18.9', 'Brandon:xyz', 'Jack:', 'Sarah:825', 'Jack:45', 'Brandon:10', 'James:3.25', 'James:125.62', 'Sarah:2.43', 'Brandon:100.5']
    
    sep = ':'
    
    text3 = [w[:w.index(sep)] for w in text2]
    text4 = [w[w.index(sep):] for w in text2]
    

    Mark Meyer 的解决方案是最优的,但对初学者不太友好。

    这里是一步一步的过程:

    1. 我们有这个列表:
    ['Brandon:5', 'Patrick:18.9', 'Brandon:xyz', 'Jack:', 'Sarah:825', 'Jack:45', 'Brandon:10', 'James:3.25', 'James:125.62', 'Sarah:2.43', 'Brandon:100.5']
    

    让我们将它分配给一个变量,以便我们稍后在程序中访问它:

    lst = ['Brandon:5', 'Patrick:18.9', 'Brandon:xyz', 'Jack:', 'Sarah:825', 'Jack:45', 'Brandon:10', 'James:3.25', 'James:125.62', 'Sarah:2.43', 'Brandon:100.5']
    
    1. 定义两个列表,namesnumbers,以便稍后存储检索到的姓名和号码。
    names = []
    numbers = []
    
    1. 遍历lst 列表,并在":" 处拆分每个字符串:
    for s in lst:
        s.split(":")
    
    1. 现在,将s.split(":") 列表中的两个值分配给两个变量namenumber
    name, number = s.split(":")
    
    1. 最后,将字符串附加到之前创建的两个列表中:
    names.append(name)
    numbers.append(number)
    

    总共:

    lst = ['Brandon:5', 'Patrick:18.9', 'Brandon:xyz', 'Jack:', 'Sarah:825', 'Jack:45', 'Brandon:10', 'James:3.25', 'James:125.62', 'Sarah:2.43', 'Brandon:100.5']
    names = []
    numbers = []
    for s in lst:
        name, number = s.split(":")
        names.append(name)
        numbers.append(number)
    print(names)
    print(numbers)
    

    输出:

    ['Brandon', 'Patrick', 'Brandon', 'Jack', 'Sarah', 'Jack', 'Brandon', 'James', 'James', 'Sarah', 'Brandon']
    ['5', '18.9', 'xyz', '', '825', '45', '10', '3.25', '125.62', '2.43', '100.5']
    

    【讨论】:

      猜你喜欢
      • 2012-02-10
      • 1970-01-01
      • 2020-11-08
      • 2011-10-24
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 2023-03-07
      相关资源
      最近更新 更多