如何在 for 循环中仅添加一次列表?
How can I add to list only once in a for loop?
代码正在运行并添加到列表中。但是,它向每个列表添加了三次而不是一次。我想将列表中的项目附加一次而不是三次。
我试过检查范围,但只有一个。但是还是用append方法3次添加到list
newlist= [['id', 'name', 'lastContactedTime', 'email', 'phone_phones', 'home_phones', 'mobile_phones', 'work_phones', 'fax_phones', 'other_phones', 'address_1', 'address_2', 'address_3', 'city', 'state', 'postal_code', 'country', 'tags'], ['12-contacts', 'Courtney James', '', 'courtney@forlanchema.com', '+1 3455463849', '', '', '', '', '', '654 Rodney Franklin street', '', '', 'Birmingham', 'AL', '45678', 'US', ''], ['4-contacts', 'Joe Malcoun', '2019-08-13 14:41:12', 'ceo@nutshell.com', '', '', '', '', '', '', '212 South Fifth Ave', '', '', 'Ann Arbor', 'MI', '48103', 'US', ''], ['8-contacts', 'Rafael Acosta', '', 'racosta@forlanchema.com', '+1 338551534', '', '', '', '', '', '13 Jordan Avenue SW', '', '', 'Birmingham', 'AL', '45302', 'US', '']]
namelist = [] # new, empty list
for i in range(1, len(newlist)):
names = newlist[i][1].split() # this yields [first_name, last_name]
namelist.append([names[1], names[0]]) # [last_name, first_name]
companylist=[]
for i in range(1, len(newlist)):
p = re.compile(r'(.+)@(.+)\.(.+)')
test_str = newlist[i][3]
company= re.findall(p, test_str)
companyname= list(company[0][1])
companynom=''.join(companyname)
companylist.append(companynom) #yields company names
# strip non-numeric characters'
workphone = []
wrkstreetaddress = []
workcityaddress = []
wrkstate = []
wrkzip = []
for i in range(1, len(newlist)):
phone = re.sub(r'\D', '', newlist[i][4])
# remove leading 1 (area codes never start with 1)
phone = phone.lstrip('1')
workingphone= '{}.{}.{}'.format(phone[0:3], phone[3:6], phone[6:])
workphone.append(workingphone) #yields a list of workphone numbers
wrkstraddress= newlist[i][10]
wrkstreetaddress.append(wrkstraddress) #yields a list of work street addresses
wrkcityaddress= newlist[i][13] #yields a list of city addresses
workcityaddress.append(wrkcityaddress)
workstate= newlist[i][14] #yields a list of states
wrkstate.append(workstate)
workzip=newlist[i][15]
wrkzip.append(workzip) #yields a list of zip codes
我希望每个列表包含一个包含三个项目的列表:
如果我打印 workstreetaddress 列表,我得到:
print(wrskstreetaddress)
['654 Rodney Franklin street', '212 South Fifth Ave', '13 Jordan Avenue SW']
instead of:
['654 Rodney Franklin street']
['654 Rodney Franklin street', '212 South Fifth Ave']
['654 Rodney Franklin street', '212 South Fifth Ave', '13 Jordan Avenue SW']
对于从 companylist 到 wrkzip 的所有其他列表,我得到相同的结果,将项目添加三次而不是一次
pandas
一切都变得更好:
import pandas as pd
df = pd.DataFrame(newlist[1:], columns=newlist[0])
无需 for-loops
:
即可轻松将各个列提取到列表中
addresses = df.address_1.tolist()
print(addresses)
['654 Rodney Franklin street', '212 South Fifth Ave', '13 Jordan Avenue SW']
轻松添加或重命名 df
列:
# split name into first and last name
df[['first_name', 'last_name']] = df.name.str.split(' ', expand=True)
# rename id
df.rename(columns={'id': 'id'}, inplace=True)
# split country_code from phone_phones
df[['country_code', 'phone_phones']] = df.phone_phones.str.split(' ', expand=True)
现在数据将更易于使用。
您代码末尾的打印语句的结果:
print(workphone, wrkstreetaddress, workcityaddress, wrkstate, wrkzip)
产量:
['345.546.3849', '..', '338.551.534'] ['654 Rodney Franklin street', '212 South Fifth Ave', '13 Jordan Avenue SW'] ['Birmingham', 'Ann Arbor', 'Birmingham'] ['AL', 'MI', 'AL'] ['45678', '48103', '45302']
我没有发现你的列表有问题。
代码正在运行并添加到列表中。但是,它向每个列表添加了三次而不是一次。我想将列表中的项目附加一次而不是三次。
我试过检查范围,但只有一个。但是还是用append方法3次添加到list
newlist= [['id', 'name', 'lastContactedTime', 'email', 'phone_phones', 'home_phones', 'mobile_phones', 'work_phones', 'fax_phones', 'other_phones', 'address_1', 'address_2', 'address_3', 'city', 'state', 'postal_code', 'country', 'tags'], ['12-contacts', 'Courtney James', '', 'courtney@forlanchema.com', '+1 3455463849', '', '', '', '', '', '654 Rodney Franklin street', '', '', 'Birmingham', 'AL', '45678', 'US', ''], ['4-contacts', 'Joe Malcoun', '2019-08-13 14:41:12', 'ceo@nutshell.com', '', '', '', '', '', '', '212 South Fifth Ave', '', '', 'Ann Arbor', 'MI', '48103', 'US', ''], ['8-contacts', 'Rafael Acosta', '', 'racosta@forlanchema.com', '+1 338551534', '', '', '', '', '', '13 Jordan Avenue SW', '', '', 'Birmingham', 'AL', '45302', 'US', '']]
namelist = [] # new, empty list
for i in range(1, len(newlist)):
names = newlist[i][1].split() # this yields [first_name, last_name]
namelist.append([names[1], names[0]]) # [last_name, first_name]
companylist=[]
for i in range(1, len(newlist)):
p = re.compile(r'(.+)@(.+)\.(.+)')
test_str = newlist[i][3]
company= re.findall(p, test_str)
companyname= list(company[0][1])
companynom=''.join(companyname)
companylist.append(companynom) #yields company names
# strip non-numeric characters'
workphone = []
wrkstreetaddress = []
workcityaddress = []
wrkstate = []
wrkzip = []
for i in range(1, len(newlist)):
phone = re.sub(r'\D', '', newlist[i][4])
# remove leading 1 (area codes never start with 1)
phone = phone.lstrip('1')
workingphone= '{}.{}.{}'.format(phone[0:3], phone[3:6], phone[6:])
workphone.append(workingphone) #yields a list of workphone numbers
wrkstraddress= newlist[i][10]
wrkstreetaddress.append(wrkstraddress) #yields a list of work street addresses
wrkcityaddress= newlist[i][13] #yields a list of city addresses
workcityaddress.append(wrkcityaddress)
workstate= newlist[i][14] #yields a list of states
wrkstate.append(workstate)
workzip=newlist[i][15]
wrkzip.append(workzip) #yields a list of zip codes
我希望每个列表包含一个包含三个项目的列表:
如果我打印 workstreetaddress 列表,我得到:
print(wrskstreetaddress)
['654 Rodney Franklin street', '212 South Fifth Ave', '13 Jordan Avenue SW']
instead of:
['654 Rodney Franklin street']
['654 Rodney Franklin street', '212 South Fifth Ave']
['654 Rodney Franklin street', '212 South Fifth Ave', '13 Jordan Avenue SW']
对于从 companylist 到 wrkzip 的所有其他列表,我得到相同的结果,将项目添加三次而不是一次
pandas
一切都变得更好:
import pandas as pd
df = pd.DataFrame(newlist[1:], columns=newlist[0])
无需 for-loops
:
即可轻松将各个列提取到列表中
addresses = df.address_1.tolist()
print(addresses)
['654 Rodney Franklin street', '212 South Fifth Ave', '13 Jordan Avenue SW']
轻松添加或重命名 df
列:
# split name into first and last name
df[['first_name', 'last_name']] = df.name.str.split(' ', expand=True)
# rename id
df.rename(columns={'id': 'id'}, inplace=True)
# split country_code from phone_phones
df[['country_code', 'phone_phones']] = df.phone_phones.str.split(' ', expand=True)
现在数据将更易于使用。
您代码末尾的打印语句的结果:
print(workphone, wrkstreetaddress, workcityaddress, wrkstate, wrkzip)
产量:
['345.546.3849', '..', '338.551.534'] ['654 Rodney Franklin street', '212 South Fifth Ave', '13 Jordan Avenue SW'] ['Birmingham', 'Ann Arbor', 'Birmingham'] ['AL', 'MI', 'AL'] ['45678', '48103', '45302']
我没有发现你的列表有问题。