使用分隔符在列表python中切片字符串

2024-09-21 07:27:51 发布

您现在位置:Python中文网/ 问答频道 /正文

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

当我使用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

Tags: or字符串列表错误切片数字sepjack
2条回答

更新

代码引发错误的原因是,您需要将字符的索引作为片段传递,并且字符本身:

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. 最后,将字符串附加到Earlier创建的两个列表中:
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']

可以使用^{}拆分列表中的每个字符串。这将为您提供一个列表列表。您可以比zip更详细地了解这一点,并将其解压缩到单独的列表中:

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')

而{}将是:

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

相关问题 更多 >

    热门问题