在2D列表中的元素内断开字符串,分隔符,python
我有一个2D数组(列表列表),其结构如下:在2D列表中的元素内断开字符串,分隔符,python,python,arrays,string,list,Python,Arrays,String,List,我有一个2D数组(列表列表),其结构如下: mylist = [['Bob','AA',3,'a string with a - convenient - delimiter'], ['Sally','BB',2,'a string with a - great - delimiter'], ['Jim','CC',2,], ['John','BB',2,'a string with a - silly - delimiter']]
mylist = [['Bob','AA',3,'a string with a - convenient - delimiter'],
['Sally','BB',2,'a string with a - great - delimiter'],
['Jim','CC',2,],
['John','BB',2,'a string with a - silly - delimiter']]
如您所见,有些行的末尾有一个长字符串。在本例中,Bob、Sally和John有一个字符串,其中包含一对连字符“-”。我想将连字符中的数据分离出来作为自己的元素/列。在右边追加是可以的。以下是我拍摄的目的:
newList = [['Bob','AA',3,'a string with a - convenient - delimiter', 'convenient'],
['Sally','BB',2,'a string with a - great - delimiter', 'great'],
['Jim','CC',2,],
['John','BB',2,'a string with a - silly - delimiter', 'silly']]
从本例中可以看出,并非每一行都有长字符串。如果它确实存在,它将始终位于同一列中,在本例中为索引[3]。如何在python中实现预期的结果?任何帮助都是超级的
编辑:
这似乎是可行的,需要最少的代码:
for i, val in enumerate(mylist):
if len(val) > 3:
array = val[3].split("-")
val.insert(4,array[1].strip())
print val
另一个条件可能是:
if '-' in val[3]:
mylist = [['Bob','AA',3,'a string with a - convenient - delimiter'],
['Sally','BB',2,'a string with a - great - delimiter'],
['Jim','CC',2,],
['John','BB',2,'a string with a - silly - delimiter']]
newlist=[]
for i in mylist:
temp=[]
for j in i:
if '-' in str(j):
temp.append(j)
temp.append(j.split('-')[1].strip())
else:
temp.append(j)
newlist.append(temp)
print newlist
#output
[['Bob', 'AA', 3, 'a string with a - convenient - delimiter', 'convenient'],
['Sally', 'BB', 2, 'a string with a - great - delimiter', 'great'],
['Jim', 'CC', 2],
['John', 'BB', 2, 'a string with a - silly - delimiter', 'silly']]