【发布时间】:2015-05-20 13:05:09
【问题描述】:
我试图找到一种方法来对齐两个对象列表(按其值排序)并通过比较它的值,如果对象在两个列表中对齐,则执行一个操作,否则执行另一个操作。例如,他的名字和年龄的孩子,并使用年龄值来对齐他们。
为了使示例简单,请尝试仅使用两个排序的整数值列表:
a = (1,2,3,6,7,11,13)
b = (2,3,4,6,7,9)
我想像这样对齐它们:
+----+----+----+----+----+----+----+----+----+
| 01 | 02 | 03 | xx | 06 | 07 | xx | 11 | 13 |
+----+ +----+ +----+----+----+
| xx | 02 | 03 | 04 | 06 | 07 | 09 | xx | xx |
+----+----+----+----+----+----+----+----+----+
对对齐值执行操作(例如将其附加到 list1):
list1 = [2,3,6,7]
并对未对齐的值执行操作(例如将其附加到 list2):
list2 = [1,4,9,11,13]
或者只是打印是否对齐:
1 = miss-aligned
2 = aligned
3 = aligned
4 = miss-aligned
6 = aligned
7 = aligned
9 = miss-aligned
11 = miss-aligned
13 = miss-aligned
我尝试过这种方式,但是......
a = (1,2,3,6,7,11,13)
b = (2,3,4,6,7,9)
list1 = []
list2 = []
# find sames and list a different value
for x in a:
for y in b:
if x == y:
list1.append(x)
print(x," = aligned")
break
if y == b[-1]:
print(x," = miss-aligned")
list2.append(x)
# find list b different value
for y in b:
for x in a:
if x == y:
break
if x == a[-1]:
print(y," = miss-aligned")
list2.append(y)
print('Same:',list1)
print('Different:',list2)
...我得到了这个不想要的输出(对于 4 和 9 没有按正确的顺序执行操作):
1 = miss-aligned
2 = aligned
3 = aligned
6 = aligned
7 = aligned
11 = miss-aligned
13 = miss-aligned
4 = miss-aligned
9 = miss-aligned
Same: [2, 3, 6, 7]
Different: [1, 11, 13, 4, 9]
我尝试了许多其他方法但没有成功。
*edit: 同一个列表中没有重复值
【问题讨论】:
-
每个列表中可以有重复项吗?而且在你的情况下,只有
6是对齐的。您需要通过说 align 更好地定义您的意思,也许您的意思是 在两个列表中都存在? -
同一列表中没有重复项。我发现定义“对齐”的更好方法是我在 ascii 中所做的小画
-
酷,然后看看我的回答