用另一个列表(Python3)提供的数据填充多维列表

用另一个列表(Python3)提供的数据填充多维列表,python,arrays,python-3.x,list,for-loop,Python,Arrays,Python 3.x,List,For Loop,如何用其他列表提供的数据填写列表 例如,我有一个包含两个条目的列表: list1=[['printer1', '172.1.1.1', '12345678', 'Xerox', 'Xerox Phaser ', 'Team@Departemnt'],['printer2', '172.1.1.2', '12345678', 'Xerox', 'Xerox Ricoh ', 'Team1@Departemnt1']] 我想修改一些条目,例如,我想拆分部门条目,并在列表中添加两列,带有一个循环 c

如何用其他列表提供的数据填写列表

例如,我有一个包含两个条目的列表:

list1=[['printer1', '172.1.1.1', '12345678', 'Xerox', 'Xerox Phaser ', 'Team@Departemnt'],['printer2', '172.1.1.2', '12345678', 'Xerox', 'Xerox Ricoh ', 'Team1@Departemnt1']]
我想修改一些条目,例如,我想拆分部门条目,并在列表中添加两列,带有一个循环

cache= list1[0][5].split('@')
list1[0][6]= cache[0]
list1[0][7]= cache[1]

如果要就地修改列表,可以使用:

输出

[['printer1', '172.1.1.1', '12345678', 'Xerox', 'Xerox Phaser ', 'Team@Departemnt', 'Team', 'Departemnt'], ['printer2', '172.1.1.2', '12345678', 'Xerox', 'Xerox Ricoh ', 'Team1@Departemnt1', 'Team1', 'Departemnt1']]
如果需要新列表,也可以将拆分添加到列表中:

result = [l + l[-1].split('@') for l in list1]

您的数据是使用
熊猫的理想格式:
不过,此方法不使用任何循环

import pandas as pd

df = pd.DataFrame(list1, columns=['name', 'ip', 'number', 'manufacturer', 'device', 'dept'])
print(df)
       name         ip    number manufacturer         device               dept
0  printer1  172.1.1.1  12345678        Xerox  Xerox Phaser     Team@Departemnt
1  printer2  172.1.1.2  12345678        Xerox   Xerox Ricoh   Team1@Departemnt1
然后您可以在
@
上拆分:

df['team'], df['dept'] = df['dept'].str.split('@', 1).str
print(df)
       name         ip    number manufacturer         device         dept   team
0  printer1  172.1.1.1  12345678        Xerox  Xerox Phaser    Departemnt   Team
1  printer2  172.1.1.2  12345678        Xerox   Xerox Ricoh   Departemnt1  Team1
如果您需要将其作为列表返回,您可以使用:

df.values.tolist()
[['printer1', '172.1.1.1', '12345678', 'Xerox', 'Xerox Phaser ', 'Departemnt', 'Team'], 
 ['printer2', '172.1.1.2', '12345678', 'Xerox', 'Xerox Ricoh ', 'Departemnt1', 'Team1']]

但是,如果您还想摆脱
team@dep
在您的新列表中,有一行代码可以做到这一点:

new_list = [l.extend(l.pop(-1).split('@')) or l for l in list1]

>>> new_list
[['printer1',
  '172.1.1.1',
  '12345678',
  'Xerox',
  'Xerox Phaser ',
  'Team',
  'Departemnt'],
 ['printer2',
  '172.1.1.2',
  '12345678',
  'Xerox',
  'Xerox Ricoh ',
  'Team1',
  'Departemnt1']]

谢谢,这正是我要找的
new_list = [l.extend(l.pop(-1).split('@')) or l for l in list1]

>>> new_list
[['printer1',
  '172.1.1.1',
  '12345678',
  'Xerox',
  'Xerox Phaser ',
  'Team',
  'Departemnt'],
 ['printer2',
  '172.1.1.2',
  '12345678',
  'Xerox',
  'Xerox Ricoh ',
  'Team1',
  'Departemnt1']]