在 python object 中加入两个内部列表
Joining two internal lists within a python object
对 python 很陌生,如果这个问题在其他地方被问过,我们深表歉意。
我正在尝试创建一个 object (HEADER),其中包含用户在 METRICS object 中输入的任何内容,不包括 3 个初始字符,即 'ga:' .
我的目标输出是:
METRICS = ['ga:sessions', 'ga:users']
HEADER = ['sessions', 'users']
到目前为止我所做的几乎实现了这一点,但是它将输出存储为单个 object 中的多个列表,这意味着(我相信)它写入并 re-writes每个列表并最终只输出最后一个列表,在这种情况下,它只是 ['users'].
METRICS = ['ga:sessions', 'ga:users']
for idx, val in enumerate(METRICS):
HEADER = val[3:].split()
print(HEADER)
print(HEADER)
你可以看到发生了什么,因为 for 循环内的 print 函数显示了两个 header,但是 for 循环外的 print 函数只显示了最后的 header.
我尝试采用的方法,以及问题的标题,是找到一种方法将 object 中的所有内部列表连接到一个列表中,这有望解决问题.
我也觉得我可能把事情复杂化了,而且有一种更简单的方法可以实现我想要实现的目标。
METRICS = ['ga:sessions', 'ga:users']
HEADERS = [item[3:] for item in METRICS]
试试这个
METRICS = ['ga:sessions', 'ga:users']
HEADER = []
for val in METRICS:
HEADER.append(val[3:])
print(HEADER)
which then means (I believe) that it writes and re-writes over each
list and ultimately outputs only the last list, which in this case,
would simply be ['users'].
你在这里有一部分是对的。 "HEADER"不是一个列表而只是一个字符串对象(变量)并且因为循环,里面的值被重写了
很简单。
我将使用您的代码,并提出修改意见,并附上评论。
代码:
METRICS = ['ga:sessions', 'ga:users']
# Create an empty list named "HEADERS" which will store all of the "HEADER" variables
HEADERS = []
for idx, val in enumerate(METRICS):
HEADER = val[3:].split()
# Since you were able to get the value of "HEADER", all we have to do is append/store it inside of "HEADERS" list
HEADERS.append(HEADER)
print(HEADER)
print(HEADERS)
输出:
['sessions']
['users']
[['sessions'], ['users']]
Here you can simply approach the solution. Like, you can use split with ':' separator instead of item[:3], that can handle your desire output dynamically.
METRICS = ['ga:sessions', 'ga:users']
HEADER = list()
for item in METRICS:
output = item.split(':')[1]
HEADER.append(output)
print(output)
print(HEADER)
Output look like,
sessions
users
['sessions', 'users']
对 python 很陌生,如果这个问题在其他地方被问过,我们深表歉意。
我正在尝试创建一个 object (HEADER),其中包含用户在 METRICS object 中输入的任何内容,不包括 3 个初始字符,即 'ga:' .
我的目标输出是:
METRICS = ['ga:sessions', 'ga:users']
HEADER = ['sessions', 'users']
到目前为止我所做的几乎实现了这一点,但是它将输出存储为单个 object 中的多个列表,这意味着(我相信)它写入并 re-writes每个列表并最终只输出最后一个列表,在这种情况下,它只是 ['users'].
METRICS = ['ga:sessions', 'ga:users']
for idx, val in enumerate(METRICS):
HEADER = val[3:].split()
print(HEADER)
print(HEADER)
你可以看到发生了什么,因为 for 循环内的 print 函数显示了两个 header,但是 for 循环外的 print 函数只显示了最后的 header.
我尝试采用的方法,以及问题的标题,是找到一种方法将 object 中的所有内部列表连接到一个列表中,这有望解决问题.
我也觉得我可能把事情复杂化了,而且有一种更简单的方法可以实现我想要实现的目标。
METRICS = ['ga:sessions', 'ga:users']
HEADERS = [item[3:] for item in METRICS]
试试这个
METRICS = ['ga:sessions', 'ga:users']
HEADER = []
for val in METRICS:
HEADER.append(val[3:])
print(HEADER)
which then means (I believe) that it writes and re-writes over each list and ultimately outputs only the last list, which in this case, would simply be ['users'].
你在这里有一部分是对的。 "HEADER"不是一个列表而只是一个字符串对象(变量)并且因为循环,里面的值被重写了
很简单。 我将使用您的代码,并提出修改意见,并附上评论。
代码:
METRICS = ['ga:sessions', 'ga:users']
# Create an empty list named "HEADERS" which will store all of the "HEADER" variables
HEADERS = []
for idx, val in enumerate(METRICS):
HEADER = val[3:].split()
# Since you were able to get the value of "HEADER", all we have to do is append/store it inside of "HEADERS" list
HEADERS.append(HEADER)
print(HEADER)
print(HEADERS)
输出:
['sessions']
['users']
[['sessions'], ['users']]
Here you can simply approach the solution. Like, you can use split with ':' separator instead of item[:3], that can handle your desire output dynamically.
METRICS = ['ga:sessions', 'ga:users']
HEADER = list()
for item in METRICS:
output = item.split(':')[1]
HEADER.append(output)
print(output)
print(HEADER)
Output look like,
sessions
users
['sessions', 'users']