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

时间:2018-12-04 16:50:09

标签: 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']]

我想修改一些条目,例如,我想拆分Department条目并在列表中添加两个带有循环的列

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

3 个答案:

答案 0 :(得分:0)

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

public static bool DoesRecordExist(string keyColumn, string keyValue, DataTable dt) {
 if (dt != null && dt.Rows.Count > 0) {
  int counter = dt.AsEnumerable().Where(r => string.Equals(SafeTrim(r[keyColumn]), keyValue, StringComparison.CurrentCultureIgnoreCase)).Count();
  return counter > 0;
 } else {
  return false;
 }
}

输出

list1 = [['printer1', '172.1.1.1', '12345678', 'Xerox', 'Xerox Phaser ', 'Team@Departemnt'],
         ['printer2', '172.1.1.2', '12345678', 'Xerox', 'Xerox Ricoh ', 'Team1@Departemnt1']]


for l in list1:
    l.extend(l[-1].split('@'))


print(list1)

如果您想要一个新列表,也可以将拆分添加到列表中。

[['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']]

答案 1 :(得分:0)

您的数据是使用pandas的理想格式:
但是,此方法不使用任何循环。

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

但是您可以轻松地使用熊猫将数据作为表进行处理

答案 2 :(得分:0)

如果您还希望摆脱新列表中的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']]