我有一个像这样的二维数组:
list_of_data =
[['Joe', 4, 'MSP', 4, 5, 'cabbage', None],
['Joe', 43, '2TM', 41, 53, 'cabbage', None],
['Joe', 24, 'MSP', 44, 55, 'cabbage', None],
['Joe', 54, 'MIA', 42, 85, 'cabbage', None],
['Tom', 7, '2TM', 4, 52, 'cabbage', None],
['Tom', 4, 'LAX', 43, 52, 'cabbage', None],
['Tom', 4, 'MCO', 4, 5, 'cabbage', None],
['Fred', 4, '2TM', 4, 5, 6, 'cabbage'],
['Fred', 4, 'LAG', 4, 5, 6, 'cabbage'],
['Fred', 4, 'ITH', 4, 5, 6, 'cabbage']]
这个问题是关于在第二个索引处包含值'2TM'的行/索引。例如:
Joe在他的数据的第二次出现时在索引2处具有值'2TM'。 Tom在他的数据的第一次出现时在索引2处具有值'2TM'。 Fred在他的数据的第一次出现时在索引2处具有值'2TM'。
每次数值'2TM'出现在数据中时,我想将'2TM'替换为接下来两行中相同索引处的值,用连字符分隔。上面的例子将成为以下内容:
list_of_data =
[['Joe', 4, 'MSP', 4, 5, 'cabbage', None],
['Joe', 43, 'MSP-MIA', 41, 53, 'cabbage', None],
['Joe', 24, 'MSP', 44, 55, 'cabbage', None],
['Joe', 54, 'MIA', 42, 85, 'cabbage', None],
['Tom', 7, 'LAX-MCO', 4, 52, 'cabbage', None],
['Tom', 4, 'LAX', 43, 52, 'cabbage', None],
['Tom', 4, 'MCO', 4, 5, 'cabbage', None],
['Fred', 4, 'LAG-ITH', 4, 5, 6, 'cabbage'],
['Fred', 4, 'LAG', 4, 5, 6, 'cabbage'],
['Fred', 4, 'ITH', 4, 5, 6, 'cabbage']]
我尝试过使用替换版。获得可能接近正确代码的方法:
x=0
for row in list_of_data:
if '2TM' in row:
list_of_data.replace(list_of_data[2], list_of_data[x+1 + x+2])
x+=1
这会产生错误消息:
AttributeError: 'list' object has no attribute 'replace'
答案 0 :(得分:1)
我认为这样做:
list_of_data = [['Joe', 4, 'MSP', 4, 5, 'cabbage', None],
['Joe', 43, '2TM', 41, 53, 'cabbage', None],
['Joe', 24, 'MSP', 44, 55, 'cabbage', None],
['Joe', 54, 'MIA', 42, 85, 'cabbage', None],
['Tom', 7, '2TM', 4, 52, 'cabbage', None],
['Tom', 4, 'LAX', 43, 52, 'cabbage', None],
['Tom', 4, 'MCO', 4, 5, 'cabbage', None],
['Fred', 4, '2TM', 4, 5, 6, 'cabbage'],
['Fred', 4, 'LAG', 4, 5, 6, 'cabbage'],
['Fred', 4, 'ITH', 4, 5, 6, 'cabbage']]
for i in range(len(list_of_data)):
if list_of_data[i][2] == '2TM':
list_of_data[i][2] = list_of_data[i+1][2] + '-' + list_of_data[i+2][2]
print(list_of_data)
<强>输出:强>
[['Joe', 4, 'MSP', 4, 5, 'cabbage', None], ['Joe', 43, 'MSP-MIA', 41, 53, 'cabbage', None], ['Joe', 24, 'MSP', 44, 55, 'cabbage', None], ['Joe', 54, 'MIA', 42, 85, 'cabbage', None], ['Tom', 7, 'LAX-MCO', 4, 52, 'cabbage', None], ['Tom', 4, 'LAX', 43, 52, 'cabbage', None], ['Tom', 4, 'MCO', 4, 5, 'cabbage', None], ['Fred', 4, 'LAG-ITH', 4, 5, 6, 'cabbage'], ['Fred', 4, 'LAG', 4, 5, 6, 'cabbage'], ['Fred', 4, 'ITH', 4, 5, 6, 'cabbage']]
答案 1 :(得分:0)
列表没有替换功能。
试试这个:
for row in list_of_data:
if '2tm' in row:
id = list_of_data.index('2tm')
next_i = id + 1;
next_again = id + 2;
list_of_data[id] = list_of_data[next_i] + '-' + list_of_data[next_again]