Assuming indexed geometry (which is essential if you want any kind of vertex cache reuse), both indexed lists and indexed strips end up with the same number of vertices, and both offer equal flexibility to rearrange the contents of the vertex buffer for maximum memory fetch cache efficiency. So there are really just two distinctions between the two:
- How many indices must be sent to the GPU?
- How much flexibility do you have to reorder triangles to maximize post vertex shader cache hits?
Note: it's important to be aware that there are two types of vertex cache in the GPU: one between the memory subsystem and vertex shader inputs (which is affected by reordering vertices in the vertex buffer, and fixing up index values to match), then another between the vertex shader outputs and primitive assembler (which is affected by reordering triangles in the index buffer). Only that latter cache is affected here.
Also note that I am ignoring the cost of degenerate triangles to link strips, because all GPUs have efficient trivial reject for such degenerates, and degenarates will always hit the post vertex shader cache, so their only real cost is in the primitive assembler stage, and it's pretty much unheard of for a modern GPU to be bottlenecked by primitive assembly. So for all practical purposes, the only cost of adding degenerate triangles is the extra indices.
So to decide which will be more efficient, you need to look at how many indices are required, and how efficient your post vertex shader caching can be.
Generally, if your geometry strips well, strips will require fewer indices than lists, but if it strips poorly, so that many degenarate links are required, the two can end up breaking roughly even.
Byt when you look at cache efficiency, lists are almost always a win. Consider for instance a terrain grid, which is a very simple case for stripping and strips almost perfectly. Trouble is, if you have long strips running from one side of the terrain to the other, the vertices from one edge of each strip will be long gone from the cache by the time the next strip wants to reuse them. The most efficient rendering order for cache reuse on a 2D is a complex set of spirals, not at all a series of regular rows, but it is impossible to find an ordering that will both strip well and also maximize cache hits.
Combined with the complexity of computing triangle strips compared to lists, I would go with lists for pretty much everything. Strips makes sense in a few very specific cases where you have geometry that naturally strips well and does not lend itself to post shader cache reuse, but such situations are incredibly rare.