我有一个由多个元组(超过100个)组成的长列表,它们都包含3个字符串项
first_list = ('the','cat','went'),('back','too','scho'),('t/e','s/e/t','o/ve') etc
许多元组都是相同的,所以我使用set函数来获得一个独特的集合
Long_list = set(first_list)
我需要原始格式的列表,但我还需要一个重复列表来清理数据 我需要删除所有“/”并用“@”替换它们 我似乎无法做这个过程。最初我尝试创建一个foor循环来遍历我的列表,然后执行查找和替换方法。
我这样做的方式给了我一个由项组成的新列表,因此不保留元组集
for small_tuple in Long_list:
the_list = list(small_tuple)
for uncleaned_string in the_list:
time = uncleaned_string.replace('/','@')
last_list.append(time)
print last_list
当我将其转换回来时,有没有办法可以保留元组中3个项目的原始格式?
答案 0 :(得分:2)
tuple(myList)
会将myList
转换为元组,前提是myList
可以像list
,tuple
或生成器那样进行迭代。
使用列表推导表达式转换元组列表中的列表列表:
last_list = [tuple(x) for x in Long_list]
或者,还要执行字符串替换:
last_list = [tuple(y.replace('/', '@') for y in x) for x in Long_list]
来自Python的参考:
元组([可迭代])
返回一个元组,其项目与iterable的项目相同且顺序相同。 iterable可以是一个序列,一个支持迭代的容器,或一个迭代器对象。如果iterable已经是一个元组,则返回不变。例如,
tuple('abc')
返回('a', 'b', 'c')
,tuple([1, 2, 3])
返回(1, 2, 3)
。如果没有给出参数,则返回一个新的空元组()
。
tuple
是一种不可变的序列类型,如Sequence Types — str, unicode, list, tuple, bytearray, buffer, xrange中所述。对于其他容器,请参阅内置的dict
,list
和[set
]类以及collections
模块。
答案 1 :(得分:0)
您可以使用转换为元组的列表推导来执行以下操作:
for small_tuple in Long_list:
the_list = list(small_tuple)
last_list.append(tuple([uncleaned_string.replace('/','@') for uncleaned_string in the_list]))
print last_list
答案 2 :(得分:0)
last_list = [tuple(s.replace('/', '@') for s in t) for t in Long_list]
答案 3 :(得分:0)
修改您的代码以满足您的需求
Process: com.demo.wear, PID: 20332
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.demo.wear/com.demo.wear.ui.WishesActivity}: java.lang.ClassNotFoundException: Didn't find class "com.demo.wear.ui.WishesActivity" on path: DexPathList[[zip file "/data/app/com.demo.wear-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2236)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.demo.wear.ui.WishesActivity" on path: DexPathList[[zip file "/data/app/com.demo.wear-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at android.app.Instrumentation.newActivity(Instrumentation.java:1066)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2226)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Suppressed: java.lang.NoClassDefFoundError: com.demo.wear.ui.WishesActivity
at dalvik.system.DexFile.defineClassNative(Native Method)
at dalvik.system.DexFile.defineClass(DexFile.java:226)
at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:219)
at dalvik.system.DexPathList.findClass(DexPathList.java:321)
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:54)
... 14 more
Suppressed: java.lang.ClassNotFoundException: com.demo.wear.ui.WishesActivity
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
... 13 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
答案 4 :(得分:0)
您可以使用OrderedDict
删除重复项,同时保留订单。
from collections import OrderedDict
x = OrderedDict.fromkeys(first_list)
Long_list = list(x)
Long_list
包含与first_list
相同的唯一元组。