假设我有一个包含这些项目的数组“array_1”:
A b A c
我希望得到一个 new 数组“array_2”,如下所示:
b A c A
我试过了:
array_1 = ['A','b','A','c']
array_2 = []
表示array_1:
中的项目if array_1[array_1.index(item)] == array_1[array_1.index(item)].upper(): array_2.append(array_1[array_1.index(item)+1]+array_1[array_1.index(item)])
问题:结果如下:
b A b A
有谁知道如何解决这个问题?这真的很棒!
谢谢,Nico。
答案 0 :(得分:3)
这是因为你的数组中有2个'A'。两种情况都是'A',
array_1[array_1.index(item)+1
将等于'b',因为索引方法返回'A'的第一个索引。
纠正这种行为;我建议使用为每个项目增加的整数。在那个cas中你将检索数组的第n项,你的程序不会返回两次相同的'A'。
回复你的评论,让我们收回你的代码并添加整数:
array_1 = ['A','b','A','c' ]
array_2 = []
i = 0
for item in array_1:
if array_1[i] == array_1[i].upper():
array_2.append(array_1[i+1]+array_1[i])
i = i + 1
在这种情况下,它可以工作但要小心,你需要在数组的最后一项为“A”的情况下添加if语句,例如=> array_1 [i + 1]将不存在。
答案 1 :(得分:2)
如果每个小写字母与连续的大写字母配对,我认为简单的平面列表是作业的错误数据结构。如果将它变成两元组列表,即:
['A', 'b', 'A', 'c'] becomes [('A', 'b'), ('A', 'c')]
然后,如果您循环遍历列表中的项目:
for item in list:
print(item[0]) # prints 'A'
print(item[1]) # prints 'b' (for first item)
要做到这一点:
input_list = ['A', 'b', 'A', 'c']
output_list = []
i = 0;
while i < len(input_list):
output_list.append((input_list[i], input_list[i+1]))
i = i + 2;
然后你可以使用列表理解轻松交换大写字母和小写字母的顺序:
swapped = [(item[1], item[0]) for item in list)]
编辑:
由于每个大写字母可能有多个小写字母,您可以使用每个组的列表,然后列出这些组。
def group_items(input_list):
output_list = []
current_group = []
while not empty(input_list):
current_item = input_list.pop(0)
if current_item == current_item.upper():
# Upper case letter, so start a new group
output_list.append(current_group)
current_group = []
current_group.append(current_item)
然后你可以很容易地反转每个内部列表:
[reversed(group) for group in group_items(input_list)]
答案 2 :(得分:1)
根据您的上一条评论,您可以使用此
获得所需内容array_1 = "SMITH Mike SMITH Judy".split()
surnames = array_1[1::2]
names = array_1[0::2]
print array_1
array_1[0::2] = surnames
array_1[1::2] = names
print array_1
你得到:
['SMITH', 'Mike', 'SMITH', 'Judy']
['Mike', 'SMITH', 'Judy', 'SMITH']
答案 3 :(得分:0)
如果我理解你的问题,那么你可以这样做:
它适用于任何长度的数组。
array_1 = ['A','b','A','c' ]
array_2 = []
for index,itm in enumerate(array_1):
if index % 2 == 0:
array_2.append(array_1[index+1])
array_2.append(array_1[index])
print array_2
输出:
['b', 'A', 'c', 'A']